Sobes.tech
Junior — Middle

Ar galima viename konteineryje užregistruoti daugiau nei vieną sąsajos įgyvendinimą?

sobes.tech AI

Atsakymas iš AI

Taip, C# dependency injection (DI) konteineriuose galima registruoti kelias tos pačios sąsajos realizacijas. Paprastai tai daroma, kai reikia turėti skirtingas elgsenos galimybes, kurias galima pasirinkti pagal kontekstą.

Pavyzdžiui, Microsoft.Extensions.DependencyInjection galite registruoti kelias realizacijas taip:

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

Kai užklausiama IEnumerable<IService>, konteineris grąžins visas užregistruotas realizacijas. Jei užklausiama tik IService, grąžinama paskutinė užregistruota realizacija (priklauso nuo konkretaus DI konteinerio).

Norint pasirinkti konkrečią realizaciją, dažnai naudojamos vardinės registracijos arba fabrikai, arba įvedamas IEnumerable<IService> ir programiškai pasirenkama reikalinga realizacija.