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.