Sobes.tech
Junior — Middle

Egyetlen konténerben több, egy interfész megvalósítását lehet regisztrálni?

sobes.tech MI

Válasz az MI-től

Igen, a C#-ban az függőség-injektálási (DI) konténerekben több implementációt is regisztrálhatunk ugyanarra az interfészre. Ez általában akkor hasznos, ha különböző viselkedési lehetőségekre van szükség, amelyeket a kontextus szerint lehet kiválasztani.

Például a Microsoft.Extensions.DependencyInjection-ben így lehet több implementációt regisztrálni:

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

Amikor IEnumerable<IService>-t kérünk, a konténer visszaadja az összes regisztrált implementációt. Ha csak IService-t kérünk, akkor a legutolsó regisztrált implementációt kapjuk vissza (ez a konkrét DI-konténertől függ).

Az adott implementáció kiválasztásához gyakran használnak névvel ellátott regisztrációkat vagy factory-kat, vagy injektálnak IEnumerable<IService>-t és programozottan választják ki a szükséges implementációt.