Android 具有继承关系的应用程序类的Dagger模块
我在Android应用程序中使用Dagger进行依赖注入 我有两个应用程序类,我们称它们为A和B。B扩展了A扩展了android.app.application A具有任何应用程序通用的职责和依赖关系。B具有特定于当前应用程序的职责和依赖关系 我希望能够有两个模块,Android 具有继承关系的应用程序类的Dagger模块,android,module,dagger,Android,Module,Dagger,我在Android应用程序中使用Dagger进行依赖注入 我有两个应用程序类,我们称它们为A和B。B扩展了A扩展了android.app.application A具有任何应用程序通用的职责和依赖关系。B具有特定于当前应用程序的职责和依赖关系 我希望能够有两个模块,AModule和BModule,其中A使用前者,B使用后者 问题在于,似乎BModule必须在编译时引用a的类,否则会引发运行时错误。因此,这就是b模块为避免错误而必须呈现的样子(注意注入注释字段的值): 但是我宁愿B模块只知道B,就
AModule
和BModule
,其中A使用前者,B使用后者
问题在于,似乎BModule
必须在编译时引用a的类,否则会引发运行时错误。因此,这就是b模块
为避免错误而必须呈现的样子(注意注入
注释字段的值):
但是我宁愿B模块
只知道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();
};
}
我认为您可以从模块A扩展模块B。让模块A了解类A,模块B了解类B。阅读更多关于模块扩展的内容,因为它不是java类扩展完美版!在您的后续工作中,我注意到您在
TestUrlModule
中使用了“includes”,并花了最后几个小时进行了实验。那是我丢失的一把重要匕首。谢谢你的帮助!我编辑了答案,所以不需要查看我的宠物项目!
@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();
};
}