Може ли в рамките на един контейнер да се регистрират повече от един вариант за реализиране на интерфейс?
sobes.tech AI
Отговор от AI
Да, в контейнерите за внедряване на зависимости (DI-контейнери) в C# може да се регистрират няколко реализации на един и същи интерфейс. Обикновено това се прави, когато е необходимо да имате различни варианти на поведение, които могат да се избират в зависимост от контекста.
Например, в Microsoft.Extensions.DependencyInjection може да регистрирате няколко реализации по следния начин:
services.AddTransient<IService, ServiceImplementationA>();
services.AddTransient<IService, ServiceImplementationB>();
Когато се поиска IEnumerable<IService>, контейнерът ще върне всички регистрирани реализации. Ако се поиска просто IService, ще бъде върната последната регистрирана реализация (зависи от конкретния DI-контейнер).
За избор на конкретна реализация често се използват именувани регистрации или фабрики, или се инжектира IEnumerable<IService> и се избира необходимата реализация програмно.