2017-07-07 1 views
0

Dans Dagger2 est-il possible de demander la même classe pour l'injection de plus d'un composant. Exemple de code ci-dessousDagger2 Pourquoi un type ne peut-il pas être injecté dans plus d'un composant?

@Component(modules = classA.class) 
interface compA 
{ 
void inject(MyActivity target); 
} 

@Component(modules = classB.class) 
interface compB 
{ 
void inject(MyActivity target); 
} 

Si possible, veuillez expliquer pourquoi et n'importe quelle référence de document.

Merci

+1

Cela n'a pas vraiment de sens d'avoir plusieurs composants comme ça. : | ce cas d'utilisation demanderait 'Subcomponents for encapsulation' selon https://google.github.io/dagger//subcomponents.html – EpicPandaForce

+0

Merci @EpicPandaForce –

+0

@EpicPandaForce pouvez-vous s'il vous plaît montrer un exemple pour ci-dessus en utilisant des sous-composants –

Répondre

1

Pas en même temps. Vous pouvez appeler la fonction d'injection souhaitée, mais vous ne pouvez pas l'injecter avec compA puis compB. Vous pouvez cependant créer un componentC qui construit les sous-composants A et B et l'injecter avec cela.

+0

J'apprécierais un peu d'explication de pourquoi? Aussi pouvez-vous s'il vous plaît me montrer comment faire cela avec des sous-composants, car je n'ai aucune expérience avec eux. –

+0

Pourquoi est philosophique - l'idée de l'injection est qu'elle remplit toutes les valeurs. Donc quand Dagger voit qu'il y a des valeurs qu'il est censé injecter qu'il ne sait pas comment injecter, il lance une exception. C'était une décision de conception de poignard, de lancer une erreur plutôt que de s'injecter partiellement. Lequel, pour l'injection basée sur le constructeur, a du sens - il ne sert plus à rien pour les autres paramètres. En ce qui concerne les sous-composants - je les chercherais pour eux, je n'ai pas le temps pour le moment de donner un exemple. –

+0

Merci, oui vous avez raison. Le composant va essayer de faire un graphique et quand il ne sait pas comment remplir une dépendance interne, il lance ce qui est assez juste. Merci d'avoir répondu. –