Novo Injetor Android com Adaga 2 – parte 3
Se você não leu as partes 1 e 2, eu sugiro que você leia primeiro. Você pode encontrar links no final.
TLDR;
Você pode usar DaggerActivity, DaggerFragment, DaggerApplication para reduzir a placa da caldeira na sua Activity/Fragment/Application.
Tudo você pode usar AndroidInjector<T> nos seus componentes da adaga para reduzir a placa de caldeira também.
Recorde que nós chamamos AndroidInjection.inject() toda atividade ou fragmento que nós queríamos usar a adaga. E também, se você quiser usar Injection no seu fragmento, você também deve implementar a interface HasSupportFragmentInject e substituir o injetor do fragmento na sua atividade.
Recentemente, eu movi esse código para a minha atividade base e fragmento base. Por que eu deveria declarar isso para cada atividade? Eu acho que movê-los para a classe base é aceitável.
Então eu vejo algumas classes no projeto dagger enquanto pesquiso, DaggerAppCompatActivity e DaggerFragment. Estas classes fazem exatamente o que eu fiz. O Android adora herança. Então podemos fingir que adoramos isso também 😛
Vejamos o que está acontecendo dentro dessas classes de biblioteca.
Nada diferente na verdade. Podemos reduzir o código da placa de caldeira em nossa atividade estendendo nossa atividade do DaggerAppCompatActivity.
Nossa classe DetailActivity foi como se segue;
Sa estenda da DaggerAppCompatActivity e remova o HasSupportFragmentInjector e o método overrided da nossa atividade.
Agora, é melhor.
DaggerApplication, AndroidInjector, AndroidSupportInjectionModule
Vejamos o que mais podemos fazer para reduzir o código da placa de caldeira. O AndroidInjector ajuda-nos a simplificar o nosso componente de aplicação. Você pode verificar a documentação do AndroidInjector aqui.
Vejamos nosso componente de aplicação e classe de aplicação.
build() e seedInstance() já está definido na classe AndroidInjector.Builder. Então nós podemos nos livrar deles e estender nosso Builder do AndroidInjection.Builder<Application>.
E também, a interface do AndroidInjector tem o método inject() nele. Então nós podemos remover o método inject() e estender nossa interface AppComponent do AndroidInjector<Aplicação>
Então, nossa interface AppComponent atualizada e reduzida por boilerplate será parecida com a seguinte
Até você perceber que nós mudamos nossos módulos também. Eu removi AndroidInjectionModule.class em módulos componentes e adicionei AndroidSupportInjectionModule.class. Isto é adicionado porque usamos o Fragmento de suporte. AndroidInjectionModule liga o seu app.Fragment ao dagger. Mas se você quiser usar injeção no v4.fragmgment então você deve adicionar AndroidSupportInjectionModule.class aos seus módulos AppComponent.
Modificamos para a forma como injetamos em nosso AppComponent. Então vamos ver o que é alterado em nossa classe Application.
Apenas como na DaggerActivity e DaggerFragment, nós também precisamos estender nossa classe Application a partir de DaggerApplication.
Nossa classe de Aplicação foi parecida com a seguinte;
Modificamos para…
Fonte
Pode encontrar esta implementação simplificada como um ramo na minha página do github. Eu não estou fundindo isso em master porque eu quero mostrar a maneira antiga de usar a adaga em cada ramo. Assim os leitores podem seguir um caminho da maneira antiga para a maneira simplificada.
Leave a Reply