Android 具有继承关系的应用程序类的Dagger模块

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,就

我在Android应用程序中使用Dagger进行依赖注入

我有两个应用程序类,我们称它们为A和B。B扩展了A扩展了android.app.application

A具有任何应用程序通用的职责和依赖关系。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();
      };
  }