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.

>
DaggerAppCompatActivity

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.

PS.

Leave a Reply