我正在 Android 应用程序中使用 Dagger 进行依赖项注入(inject)。
我有 2 个应用程序类,我们称它们为 A 和 B。 B 扩展 A 扩展 android.app.Application
A 具有任何应用程序通用的职责和依赖关系。 B 具有特定于当前应用程序的职责和依赖关系。
我希望能够有 2 个模块,AModule
和 BModule
,A 使用前者注入(inject)自身,B 使用后者注入(inject)自身。
问题在于,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 {
...
}
当我这样做时抛出的错误实际上表明,被注入(inject)的实例 (A) 不属于 BModule
已知负责注入(inject)的类。
有没有一种方法可以实现这一点并且不会产生运行时错误?
谢谢!
最佳答案
使用模块扩展:
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();
};
}
关于android - 具有继承关系的应用程序类的 Dagger 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828344/