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的作用域遵循活动生命周期
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);
}
}
可能是重复的是的,为什么我从来没有想过这样?你是圣人。谢谢