Dependency Injection | CSharp
- Dependency Injection | CSharp
Injeção manual
public ApplicationJobs(IServiceProvider sp)
{
_serviceProvider = sp;
AgendarJobsRelatorio();
AgendarJobsArquivo();
}
private void AgendarJobsArquivo()
{
var job = _serviceProvider.CreateScope().ServiceProvider.GetRequiredService<ArquivoAgendamentoJob>();
job.Agendar();
}
O que acontece com multiplas instâncias para a mesma interface ?
- Exemplo
services.AddScoped<Interface, Classe1>()
services.AddScoped<Interface, Classe2>(),
services.AddScoped<Interface, Classe3>()
info
- O DI container armazena três serviços distintos para a mesma interface.
- Ao injetar a interface de forma singular, será retornada a última implementação registrada.
- Ao injetar
IEnumerable<IMinhaInterface>, você recebe todas as três instâncias, na ordem de registro.
- Exemplo de
IEnumerable<IMinhaInterface>
public class MinhaClasse
{
public MinhaClasse(IEnumerable<IMinhaInterface> minhasInterfaces)
{
// ...
}
}