,例如,请说下面。
- 有一个名为MyAttivity的活动。
- 有两个名为A,B和MyActivity具有这些类实例的类。
- 有一个名为C的类,我想注入A&b。
- C具有遵循活动生命周期的范围。
在这种情况下,无论范围如何
您需要使用预选赛。摘自《dagger用户指南的预选赛》部分:
有时单独的类型不足以识别依赖性。在 在这种情况下,我们添加了预选程序注释。
对于您的情况,仅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);
}
}