Conteúdo
- 1. Introdução
- O que é injeção de dependência, exemplo de dependência
- Adaga 2 - Introdução
- Primeiro uso do Dagger 2
1. Introdução
O artigo não foi escrito por um programador avançado com as mesmas palavras comuns e compreensíveis.
Este artigo usa o código de exemplo Kotlin. Adaga versão 2.17. Um exemplo pode ser baixado no final do artigo.
O que é injeção de dependência?
Injeção de Dependência (injeção ou injeção de dependência) é a dependência de uma classe em outra. isto é para a operação completa de uma classe, é necessária a inicialização da outra (sua) classe.
Por exemplo, a classe Car (carro) não pode funcionar sem a classe Engine, que por sua vez não pode funcionar sem a classe Fuel. É assim:
class Car(private var engine: Engine) class Engine ( private var fuel: Fuel) class Fuel(){ private val fuel = if(BuildConfig.DEBUG){ “benzine” } else { “diesel” } }
Neste exemplo, a classe Car depende da classe Engine e, por sua vez, depende da classe Fuel.
Adaga 2 - Introdução
O Dagger é uma biblioteca que ajuda a implementar a injeção de dependência:. Esta é uma biblioteca do google. Documentação detalhada está
disponível aqui .
Prós da adaga:
- Eu tenho que escrever menos código padrão.
- Ajuda a estruturar dependências.
- Simplifica bastante o trabalho quando existem muitas dependências
- O código se torna fácil de ler.
Contras da adaga:
- Falta de documentação detalhada
- Dagger tenta entender as intenções do desenvolvedor usando anotações. Fica complicado quando ele não entende você corretamente
- punhal gera código que é tão difícil de detectar
Primeiro uso do Dagger 2
Primeiro de tudo, você precisa adicionar punhal ao aplicativo. Eu sei 2 métodos como fazê-lo
1. Abra build.gradle (App) e adicione um rastreio.
1.1 No topo da seção de declaração do plugin
apply plugin: 'kotlin-kapt'
1.2 na seção dependências
{ ... kapt "com.google.dagger:dagger-compiler:$dagger_version" implementation "com.google.dagger:dagger:$dagger_version" }
Eu especifico a versão do punhal (dagger_version) na seção
ext { dagger_version = '2.17' }
Se não for esse o caso, a seção precisará ser adicionada acima da seção android.
2. Adicione o repositório Maven através da estrutura do projeto - dependências - adicione dependências da biblioteca
Depois de sincronizar o projeto, estamos prontos para implementar dependências usando o punhal.
Primeiro, crie as classes Car, Engine e Fuel:
class Car constructor(private var engine: Engine) class Engine constructor(private var fuel: Fuel) class Fuel { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } }
Antes dos construtores das classes Carro, Motor e Combustível, adicionamos a anotação Injeção do punhal, permitindo que o punhal entenda que essas classes devem ser implementadas, se necessário. Temos o rastro.
class Car @Inject constructor(private var engine: Engine) class Engine @Inject constructor(private var fuel: Fuel) class Fuel @Inject constructor() { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } }
O Dagger precisa saber como criar todos os objetos que ele precisa implementar. Para listar todas as classes que implementamos (Injetar), é usada a anotação
Component , que é declarada para a interface (DaggerComponent).
É assim:
@Component interface DaggerComponent { fun getCar(): Car fun getEngine(): Engine fun getFuel(): Fuel }
Ao declarar métodos de componentes, não são os nomes dos métodos que são importantes, mas a classe que eles retornam.
Nesta etapa, você precisa criar um projeto (Build - Rebuild project). Depois disso, o punhal irá gerar as classes e a fábrica necessárias para inicializar os componentes. O nome da fábrica coincidirá com o nome da interface na qual inicializamos as classes para o punhal, exceto que o prefixo “Punhal” será adicionado, ou seja, na saída, obtemos a classe DaggerDaggerComponent.
Está tudo pronto. Vamos tentar criar um campo de carro do tipo Car em MainActivity:
private var car: Car = DaggerDaggerComponent.create().getCar()
Ao iniciar o aplicativo, você pode garantir que o campo do carro seja inicializado ao acessá-lo
Código fonte