Да, в контейнерах внедрения зависимостей (DI-контейнерах) на C# можно зарегистрировать несколько реализаций одного интерфейса. Обычно это делается, если нужно иметь разные варианты поведения, которые можно выбирать по контексту.
Можно ли в рамках одного контейнера зарегистрировать более одного варианта реализации одного интерфейса?
Да, в контейнерах внедрения зависимостей (DI-контейнерах) на C# можно зарегистрировать несколько реализаций одного интерфейса.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Да, в контейнерах внедрения зависимостей (DI-контейнерах) на C# можно зарегистрировать несколько реализаций одного интерфейса. Обычно это делается, если нужно иметь разные варианты поведения, которые можно выбирать по контексту.
Например, в Microsoft.Extensions.DependencyInjection можно зарегистрировать несколько реализаций так:
services.AddTransient<IService, ServiceImplementationA>();
services.AddTransient<IService, ServiceImplementationB>();
При этом, если запрашивать IEnumerable<IService>, контейнер вернёт все зарегистрированные реализации. Если же запрашивать просто IService, то будет возвращена последняя зарегистрированная реализация (зависит от конкретного DI-контейнера).
Для выбора конкретной реализации часто используют именованные регистрации или фабрики, либо внедряют IEnumerable<IService> и выбирают нужную реализацию программно.