Sobes.tech
Junior — Middle

Kas võib registreerida rohkem kui ühe liidese rakenduse ühes konteineris?

sobes.tech AI

Vastus AI-lt

Jah, C#-i sõltuvuse sisestamise (DI) konteinerites saab registreerida mitu sama liidese teostust. Tavaliselt tehakse seda siis, kui on vaja erinevaid käitumisvõimalusi, mida saab kontekstist lähtudes valida.

Näiteks Microsoft.Extensions.DependencyInjection'is saate registreerida mitu teostust järgmiselt:

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

Kui taotletakse IEnumerable<IService>, tagastab konteiner kõik registreeritud teostused. Kui taotletakse ainult IService, tagastatakse viimane registreeritud teostus (sõltub konkreetsest DI-konteinerist).

Spetsiifilise teostuse valimiseks kasutatakse sageli nimega registreerimisi või fabrike, või sisestatakse IEnumerable<IService> ja valitakse programmipõhiselt vajalik teostus.