Android 如何使用Dagger2注入不同的实例

Android 如何使用Dagger2注入不同的实例,android,dagger-2,dagger,Android,Dagger 2,Dagger,例如,让我们像下面这样说 有一个名为MyActivity的活动 有两个名为A、B的类,MyActivity具有这些类实例 我想将一个名为C的类注入a&B C的作用域遵循活动生命周期 在这种情况下,无论范围如何,是否有任何方法可以使用Dagger 2将不同的C实例传递到a、B?您需要使用。从的限定符部分: 有时,仅类型不足以识别依赖项。在里面 在这种情况下,我们添加了一个限定符注释 对于您的情况,仅仅C不足以识别您想要注入A和B的两个不同依赖项。因此,您需要添加一个限定符来区分这两个实例。以下

例如,让我们像下面这样说

  • 有一个名为MyActivity的活动
  • 有两个名为A、B的类,MyActivity具有这些类实例
  • 我想将一个名为C的类注入a&B
  • C的作用域遵循活动生命周期
在这种情况下,无论范围如何,是否有任何方法可以使用Dagger 2将不同的C实例传递到a、B?

您需要使用。从的限定符部分:

有时,仅类型不足以识别依赖项。在里面 在这种情况下,我们添加了一个限定符注释

对于您的情况,仅仅
C
不足以识别您想要注入
A
B
的两个不同依赖项。因此,您需要添加一个限定符来区分这两个实例。以下是一个例子:

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);
    }
}

可能是重复的是的,为什么我从来没有想过这样?你是圣人。谢谢