Junior — Middle
Бир контейнерде бир интерфейсдин бир нече ишке ашыруусун каттоо мүмкүнбү?
sobes.tech AI
AIден жооп
Ооба, C#тогу көз карандысыздык (DI) контейнерлеринде бир интерфейс үчүн бир нече ишке ашырууларды каттоого алса болот. Бул көбүнесе, контекстке жараша тандалган ар кандай жүрүм-турум варианттары керек болгондо жасалат.
Мисалы, Microsoft.Extensions.DependencyInjectionде, сиз мындайча каттай аласыз:
services.AddTransient<IService, ServiceImplementationA>();
services.AddTransient<IService, ServiceImplementationB>();
IEnumerable<IService> суралганда, контейнер бардык катталган ишке ашырууларды кайтарат. Эгер гана IService суралса, акыркы катталган ишке ашыруу кайтарылат (бул конкреттүү DI-контейнерге көз каранды).
Конкреттүү ишке ашырууну тандоо үчүн көбүнесе аталыштуу каттоолор же фабрикалар колдонулат, же IEnumerable<IService> инжекторлошуп, керектүү ишке ашыруу программалык түрдө тандалат.