Sobes.tech
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> инжекторлошуп, керектүү ишке ашыруу программалык түрдө тандалат.