Sobes.tech
Back to questions
Junior — Middle
71

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

Companies where asked
Платформа

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> и выбирают нужную реализацию программно.