Sobes.tech
Junior — Middle

Може ли в рамките на един контейнер да се регистрират повече от един вариант за реализиране на интерфейс?

sobes.tech AI

Отговор от AI

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

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

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

Когато се поиска IEnumerable<IService>, контейнерът ще върне всички регистрирани реализации. Ако се поиска просто IService, ще бъде върната последната регистрирана реализация (зависи от конкретния DI-контейнер).

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