我正在使用Dagger在Android应用程序中进行依赖项注入。
我有2个应用程序类,我们称它们为A和B。B扩展A扩展android.app.Application
具有对任何应用程序通用的职责和依赖性。 B具有特定于当前应用程序的职责和依赖性。
我希望能够有两个模块,分别是AModule
和BModule
,A使用前者注入自身,而B使用后者注入。
问题在于,似乎BModule
必须在编译时引用A的类,否则会引发运行时错误。因此,这是BModule
避免发生错误的样子(请注意injects
注释字段的值):
@Module(injects = {A.class}, library = true, complete = false)
public class BModule {
...
}
但是我宁愿
BModule
只知道B,像这样:@Module(injects = {B.class}, library = true, complete = false)
public class BModule {
...
}
我执行此操作时抛出的错误实际上表示正在注入的实例(A)不是已知的
BModule
负责注入的类。有没有一种方法可以实现而不会产生运行时错误?
谢谢!
最佳答案
使用模块扩展名:
public class A {
@Inject
AA a;
}
public class B extends A {
@Inject
BB b;
}
和模块:
@Module ( injects = A.class )
public class AModule {
@Provides
public AA getAA() {
return new AA();
};
}
@Module ( overrides = true, includes = AModule.class, injects = B.class )
public class BModule {
@Provides
public BB getBB() {
return new BB();
};
}