O que é injeção de dependência?
É uma técnica para buscar o baixo acoplamento entre os objetos e suas dependências. O termo, acoplamento é uma conexão ou dependência entre diversos módulos/sistemas de um projeto de software. É também conhecido como inversão de controle, inversão de dependência ou injeção de dependência. É uma padrão de projeto que permite baixo acoplamento do código.
SOLID: Principio da Inversão de dependência.
“Devemos depender de uma abstração e não de uma implementação.”
Benefícios
- Elimina o forte acoplamento entre objetos;
- Aplicação mais flexível;
- Facilidade de testes unitários;
- Facilidade na manutenção;
Ciclos de vida
Injetar dependências significa que podemos ter acesso a um objeto sem, necessariamente, instanciar diretamente este objeto, e também compartilhar a mesma instância deste objeto dentro de uma chamada. Quem irá instanciar e gerenciar o objeto é o mecanismo de injeção de dependência do ASP.NET Core.
AddSingleton
Cria uma instância que é usada por toda a aplicação, ou seja, os objetos serão compartilhados por todas a aplicação, independente da chamada, sempre iremos acessar o mesmo objeto.
AddScopped
Cria uma instância por requisição dentro do escopo. Os objetos são compartilhados dentro de uma mesma requisição, todas as instâncias do objeto serão mantidas enquanto durar a requisição.
AddTransient
Cria um objeto do serviço toda vez que um objeto for requisitado. A cada requisição todos os objetos são criados novamente, ou seja, cada vez que chamamos a nossa aplicação, tudo é instanciado de novo, o estado não é mantido.
Mão na Massa:
- Criando a interface
- Classe implementando a interface
- Injetando pelo Construtor da classe
- Registrando a injeção na classe startup, método ConfigureServices
- Usando a injeção em um controller
Repositório de exemplo no Github
Referências