2013-10-30 9 views
5

Il mio team ha adottato Dagger per l'iniezione delle dipendenze all'interno della nostra app per Android e devo dire che ci piace fino ad ora. Tuttavia, vogliamo assicurarci che lo stiamo usando in modo efficiente. Mi stavo chiedendo se qualcuno può spiegare o se c'è qualche documentazione che spiega i casi in cui Dagger ricade nella riflessione per l'iniezione di dipendenze?C'è documentazione su quando Dagger torna a riflettere durante l'iniezione di dipendenze?

risposta

9

La logica di fallback di Dagger è incorporata nella sua classe FailoverLoader. Utilizzava il failover quando non poteva caricare un ModuleAdapter per un dato modulo, ma le versioni più recenti falliscono con un errore se non riesce a caricare un ModuleAdapter.

Attualmente, Dagger eseguirà il failover se non è in grado di trovare una classe InjectAdapter per un determinato tipo che deve essere iniettato. Il caso più comune è quando si ha un genitore astratto di un tipo iniettabile, che non ha campi @Inject. In questo caso, non è stato creato alcun InjectAdapter per questo, e quindi quando viene caricato il tipo concreto iniettabile, prova a cercare un adattatore per il genitore, non riesce a trovarne uno e viene creato un supporto riflettente.

Analogamente, se non si esegue la generazione del codice rispetto alle classi che sono decorate con campi o costruttori @Inject, Dagger tornerà a riflettere anche per quelle. È davvero la stessa logica con il caso ereditario sopra, è solo che l'ereditarietà è l'unico caso che non deriva da un fallimento nell'esecuzione della generazione del codice.

Come da parte, il fork di Google allo http://github.com/google/dagger attualmente genera adattatori che gestiscono i loro tipi principali senza cercare un adattatore per i genitori (adattatori genitore codificato hard), quindi questo failover non si verifica nel fork di Google. Non abbiamo rilasciato il fork di Google a Maven, poiché è stato quasi identico fino a poco tempo fa, ma se la logica di failover nelle classi parent è un problema, potresti voler presentare un problema e chiedere una versione.

Problemi correlati