É possível registrar mais de uma implementação de uma interface num único contêiner?
sobes.tech IA
Resposta da IA
Sim, nos contentores de injeção de dependências (contentores DI) em C# é possível registar várias implementações de uma mesma interface. Geralmente, isto é feito quando é necessário ter diferentes opções de comportamento que podem ser escolhidas consoante o contexto.
Por exemplo, no Microsoft.Extensions.DependencyInjection, pode-se registar várias implementações assim:
services.AddTransient<IService, ServiceImplementationA>();
services.AddTransient<IService, ServiceImplementationB>();
Ao solicitar IEnumerable<IService>, o contentor retornará todas as implementações registadas. Se solicitar apenas IService, será devolvida a última implementação registada (isto depende do contentor DI específico).
Para escolher uma implementação concreta, costuma-se usar registos nomeados ou fábricas, ou injetar IEnumerable<IService> e selecionar a implementação necessária programaticamente.