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