たとえば、次のようにします。Dagger2で別のインスタンスを挿入するには
- MyActivityという名前のアクティビティがあります。
- A、Bという2つのクラスがあり、MyActivityにはこれらのクラスインスタンスがあります。
- 私はA &に注入したいCという名前のクラスがあります。
- Cには活動のライフサイクルに従うスコープがあります。
このような状況では、スコープに関係なく、Dagger 2を使用してCの別のインスタンスをA、Bに渡す方法はありますか?
たとえば、次のようにします。Dagger2で別のインスタンスを挿入するには
このような状況では、スコープに関係なく、Dagger 2を使用してCの別のインスタンスをA、Bに渡す方法はありますか?
qualifiersを使用する必要があります。 dagger user's guideの修飾子セクションから:
場合によっては、タイプだけでは依存関係を特定するには不十分です。この場合、 に修飾子アノテーションを追加します。あなたのケースでは
、単なるC
はあなたがA
とB
に注入する2つの異なる依存性を識別するのに十分ではありません。したがって、2つのインスタンスを区別する修飾子を追加します。次に例を示します。
public class A {
private final C c;
@Inject
public A(@Named("Instance 1") C c) {
this.c = c;
}
}
public class B {
private final C c;
@Inject
public B(@Named("Instance 2") C c) {
this.c = c;
}
}
モジュール:
@Module
public class CModule() {
@Provides
@Named("Instance 1")
C provideInstance1OfC() {
return new C();
}
@Provides
@Named("Instance 2")
C provideInstance2OfC() {
return new C();
}
}
コンポーネント:最後に
@Component(modules = { CModule.class })
public interface ActivityComponent {
void inject(MyActivitiy activity);
}
:
public class MyActivity extends Activity {
@Inject A a;
@Inject B b;
@Override
void onCreate() {
super.onCreate();
DaggerActivityComponent.builder()
.cModule(new CModule())
.build()
.inject(this);
}
}
はい、なぜ私はこのように考えることができませんでしたか?あなたは聖人です。ありがとう。 –
http://stackoverflow.com/a/40447384/7045114 –
[のオブジェクトを提供する方法の可能な複製同じタイプですか? Dagger2](http://stackoverflow.com/questions/40447262/how-to-provide-objects-of-the-same-type-dagger2) –