Czy można zarejestrować więcej niż jedną implementację interfejsu w jednym kontenerze?
sobes.tech AI
Odpowiedź od AI
Tak, w kontenerach wstrzykiwania zależności (DI) w C# można zarejestrować wiele implementacji tego samego interfejsu. Zazwyczaj robi się to, gdy potrzebne są różne opcje zachowania, które można wybierać w zależności od kontekstu.
Na przykład, w Microsoft.Extensions.DependencyInjection można zarejestrować kilka implementacji tak:
services.AddTransient<IService, ServiceImplementationA>();
services.AddTransient<IService, ServiceImplementationB>();
Podczas żądania IEnumerable<IService> kontener zwróci wszystkie zarejestrowane implementacje. Jeśli żąda się tylko IService, zostanie zwrócona ostatnia zarejestrowanych implementacji (zależy od konkretnego kontenera DI).
Do wyboru konkretnej implementacji często używa się rejestracji nazwanych lub fabryk, albo wstrzykuje się IEnumerable<IService> i wybiera potrzebną implementację programowo.