我很抱歉只能提供伪代码。我在我的一个android项目中使用Dagger 2,并且当遇到链式依赖时我遇到了一些麻烦,例如“A as a B and B has C”,如下所示:
class A {
@Inject B b;
void bootstrap() {
componentA.inject(this);
}
}
class B {
@Inject C c;
}
模块和组件我看起来如下:
moduleA {
provides B;
provides C;
}
componentA {
void inject(A);
}
但是,在运行应用程序时,不会注入C,因此在引用时会给我一个空指针异常。
我的问题是:为什么不注射C?
我试图在B中使用bootstrap方法并将componentA显式注入到B中,如下所示:
class B {
@Inject C c;
void bootstrap() {
componentA.inject(this);
}
}
它有效,但我感觉不对,因为我期望匕首2为我找出依赖关系,而不是沿着链传递componentA。任何帮助,将不胜感激!
答案 0 :(得分:0)
如果您不想在链中传递组件A,则必须在提供的类中使用构造函数参数而不是@Inject。
@Module
public class ModuleA {
@Singleton
@Provides
public A a(B b) {
return new A(b);
}
@Singleton
@Provides
public B b(C c) {
return new B(c);
}
@Singleton
@Provides
public C c() {
return new C();
}
}