gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:24:20 24 4
gpt4 key购买 nike

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

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

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

我希望能够有 2 个模块,AModuleBModule,A 使用前者注入(inject)自身,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 {
...
}

当我这样做时抛出的错误表明,实际上,被注入(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 - 具有继承关系的Application类的Dagger模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com