我遇到问题我不知道如何解决..
首先,我有n个注入A类的服务,我提供带有侦听器接口B的A类,用于数据共享
Interface B {
void onActionA(String a);
void onActionB(String b);
}
class A {
private B listener;
protected @Inject C;
protected @Inject D;
private AppComponent component;
A(B listener) {
this.listener = listener;
component = DaggerAppComponent.create();
component.inject(this);
}
void onAAction() {
listener.onActionA("a case");
}
void onBAction() {
listener.onActionB("b case");
}
}
有问题我有时需要为A类调用监听器B,而不是从A类调用,但是从注入的服务C或D调用,我可以以某种方式传递给那些注入的服务监听器B吗?
答案 0 :(得分:0)
不确定整体设计,但是您可以在创建B
期间将AppModule
的实例传递到AppComponent
,从而使其在依赖关系树中可用。
您的AppModule
必须看起来像这样:
@Module
public class AppModule {
private final B listener;
public AppModule(B listener) {
this.listener = listener;
}
@Provides
B provideListener() {
return listener;
}
@Provides
C provideC(B listener) {
return new C(listener);
}
@Provides
D provideD(B listener) {
return new D(listener);
}
}
然后必须使用AppComponent
创建AppModule
,如下所示:
public class A {
@Inject B; // either inject or assign in constructor
@Inject C;
@Inject D;
public A(B listener) {
AppComponent component = DaggerAppComponent.builder()
.appModule(new AppModule(listener)) // now mandatory because of the non-default constructor
.build();
component.inject(this);
}
}