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

标签 android module dagger

我正在 Android 应用程序中使用 Dagger 进行依赖项注入(inject)。

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

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

我希望能够有 2 个模块,AModuleBModule,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/

相关文章:

javascript - Android 混合应用程序给我 "Uncaught SyntaxError: Unexpected identifier",源 : (1)

Android Studio 不会将布局从横向更改为纵向

module - 两个模块,都导出相同的名称

android - Dagger2 - DoubleCheck 中的重复实例

android - android 中总是 FileNotFoundException 权限被拒绝

android - TextView 文本缩小到给定的宽度

python - 使用类的实例

python - 如何从本地目录导入模块而不是 pip 安装的库?

android - 如何在自定义 View 或其他 android 类中使用 AndroidInjection 类?

android - 没有专用子组件的 fragment 注入(inject)