O que é?
Uma técnica que permite a inserção de um objeto em outro, geralmente através do construtor, criando a relação de dependência.
O método que utilizamos para adicionar configurações para o Controller é um exemplo de injeção de Dependência.
Técnica muito utilizada para melhorar a qualidade de código em refatorações, e torná-lo mais testável.
Injeção de dependência trata os problemas da seguinte maneira:
- O uso de uma interface ou classe base para abstrair a implementação da dependência.
- Registrando a dependência em um contêiner de serviço. O ASP.NET Core fornece um contêiner de serviço interno, o IServiceProvider. Normalmente, os serviços são registrados no método do Startup. ConfigureServices aplicativo.
- Injeção do serviço no construtor da classe na qual ele é usado. A estrutura assume a responsabilidade de criar uma instância da dependência e de descartá-la quando não for mais necessária.
Singleton
: uma instância por aplicação;Scoped
: uma instância por requisição;Transient
: uma instância por classe;
Startup
AddSingleton
: Instância para toda aplicação enquanto ela estiver inicializada.Executando a aplicação
Foi colocado um breakpoint no construtor de cada controladora.
Ao executar um método da controladora de
Projects
, obtivemos o seguinte comportamento:Ou seja, a propriedade "Name" já veio com o nome definido na
Statup
.Em seguida, executamos um método da controladora
Users
, obtivemos o seguinte comportamento:O objeto teve duas requisições diferentes e foi alterado entre elas, por conta do padrão
Singleton
.Por ser um
Singleton
é uma instância para toda aplicação enquanto ela estiver inicializada.