我在Android应用程序中使用Dagger进行依赖注入。
我有2个应用程序类,我们称之为A和B. B扩展A扩展android.app.Application
A具有对任何应用程序通用的职责和依赖关系。 B具有特定于当前应用程序的职责和依赖性。
我希望能够拥有2个模块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
已知负责注入的类。
有没有办法实现这一点,不会产生运行时错误?
谢谢!
答案 0 :(得分:2)
使用模块扩展名:
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();
};
}