O que é injeção de dependência?

Robson Linhares
Robson Linhares

--

É 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
Interface(abstração)
  • Classe implementando a interface
implementando interface
  • Injetando pelo Construtor da classe
Injeção no construtor da classe.
  • Registrando a injeção na classe startup, método ConfigureServices
Registrando a interface(abstração) e a implementação na classe startup
  • Usando a injeção em um controller
Utilizando a injeção em um controller

Repositório de exemplo no Github

Referências

--

--

Robson Linhares
Robson Linhares

Analista de Sistemas || Desenvolvedor. Amante de tecnologia.