Skip to main content

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)
{
// ...
}
}