Можно ли в рамках одного контейнера зарегистрировать более одного варианта реализации одного интерфейса?

Да, в контейнерах внедрения зависимостей (DI-контейнерах) на C# можно зарегистрировать несколько реализаций одного интерфейса.

Короткий ответ

Что ответить на собеседовании

Да, в контейнерах внедрения зависимостей (DI-контейнерах) на C# можно зарегистрировать несколько реализаций одного интерфейса. Обычно это делается, если нужно иметь разные варианты поведения, которые можно выбирать по контексту.

Подробный разбор

Ответ с пояснениями

Да, в контейнерах внедрения зависимостей (DI-контейнерах) на C# можно зарегистрировать несколько реализаций одного интерфейса. Обычно это делается, если нужно иметь разные варианты поведения, которые можно выбирать по контексту.

Например, в Microsoft.Extensions.DependencyInjection можно зарегистрировать несколько реализаций так:

services.AddTransient<IService, ServiceImplementationA>();
services.AddTransient<IService, ServiceImplementationB>();

При этом, если запрашивать IEnumerable<IService>, контейнер вернёт все зарегистрированные реализации. Если же запрашивать просто IService, то будет возвращена последняя зарегистрированная реализация (зависит от конкретного DI-контейнера).

Для выбора конкретной реализации часто используют именованные регистрации или фабрики, либо внедряют IEnumerable<IService> и выбирают нужную реализацию программно.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку