Sobes.tech
Junior — Middle

É 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.