2

我在 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已知负责注入的类。

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

谢谢!

4

1 回答 1

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();
      };
  }
于 2014-01-01T18:10:04.313 回答