Sobes.tech
Junior — Middle

Je možné v rámci jedného kontajnera zaregistrovať viac ako jednu implementáciu rozhrania?

sobes.tech AI

Odpoveď od AI

Áno, v kontajneroch závislostnej injekcie (DI) v C# je možné zaregistrovať niekoľko implementácií toho istého rozhrania. Zvyčajne sa to robí, keď je potrebné mať rôzne možnosti správania, ktoré je možné vyberať podľa kontextu.

Napríklad v Microsoft.Extensions.DependencyInjection môžete zaregistrovať viacero implementácií takto:

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

Keď sa požaduje IEnumerable<IService>, kontajner vráti všetky zaregistrované implementácie. Ak sa požaduje len IService, vráti sa posledná zaregistrovaná implementácia (závisí od konkrétneho DI-kontajnera).

Na výber konkrétnej implementácie sa často používajú pomenované registrácie alebo továrne, alebo sa injektuje IEnumerable<IService> a programovo sa vyberá požadovaná implementácia.