具有继承关系的Application类的Dagger模块

时间:2013-12-29 17:59:19

标签: android module dagger

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

我有2个应用程序类,我们称之为A和B. B扩展A扩展android.app.Application

A具有对任何应用程序通用的职责和依赖关系。 B具有特定于当前应用程序的职责和依赖性。

我希望能够拥有2个模块AModuleBModule,其中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已知负责注入的类。

有没有办法实现这一点,不会产生运行时错误?

谢谢!

1 个答案:

答案 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();
      };
  }