2017-07-07 10 views
0

Dagger2では、複数のコンポーネントから同じクラスの注入を要求することができます。以下のサンプルコードDagger2 1つのタイプを複数のコンポーネントに注入できないのはなぜですか?

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

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

可能であれば、理由と説明書を参考にして説明してください。

ありがとうございました

+1

このような複数のコンポーネントを持つことは実際には意味がありません。 :|このユースケースはhttps://google.github.io/dagger//subcomponents.htmlのように 'カプセル化のためのサブコンポーネント 'を要求するでしょう – EpicPandaForce

+0

ありがとう@EpicPandaForce –

+0

@EpicPandaForceあなたは上記のサブコンポーネントを使って例を示してください。 –

答えて

1

同時にではありません。どちらの関数も呼び出すことができますが、compAとcompBを一緒に注入することはできません。しかし、サブコンポーネントAとBをビルドして、それを注入するコンポーネントCを作ることができます。

+0

私はありがたいです理由の説明のビット?また、私はサブコンポーネントを使ってそれを行う方法を私に見せてもらえますか?私はそれらの経験を持っていません。 –

+0

なぜ哲学的なのですか?注射の考え方は、それがすべての値を埋めるということです。だからDaggerは、注射する方法がわからないという値を注入するはずの値があると判断すると、例外をスローします。それは、部分的に注入するのではなく、エラーを投げるという、短剣の設計上の決定でした。コンストラクタベースの注入では意味がありますが、今は他のパラメータに対して何を置くべきではありません。サブコンポーネントについては、私はそれらのためにgoogleを使っていましたが、今のところ例をまとめておく時間がありません。 –

+0

ありがとうございます、はい、あなたは正しいです。コンポーネントはグラフを作成しようとしますが、内部依存関係がどのようにいっぱいになっているのかわからないときにはかなり公平な処理が行われます。答えをありがとう。 –

関連する問題