【问题标题】:How to inject using interface in dagger2如何在 dagger2 中使用接口注入
【发布时间】:2019-06-28 22:58:31
【问题描述】:

考虑以下结构:

public class WaterWorld implements IWorld {

    ...
    @Inject
    CreationMode creationMode;

    @Override
    public final void init() {
        WorldModule.getComponent().inject(this);
    }
    ...
}

如果Component 具有以下结构,WaterWorld 是否有可能获得依赖关系:

    void inject(IWorld world);

我以这种方式得到空值。但是,如果我尝试在下面这样做

    void inject(WaterWorld world);

然后就可以了。但是,我有很多实现IWorld 的类。我想这样做:void inject(IWorld world); 如何做到这一点或是否有其他通用解决方案?

【问题讨论】:

    标签: android dependency-injection interface dagger-2 dagger


    【解决方案1】:

    不,Dagger 将始终注入 inject(Foo foo) 方法中指定的类。它将在父类型中注入对象,但不会在子类中注入对象。
    Dagger 使用指定的类型来生成注入代码,但如果你不指定特定的类,那么 Dagger 根本不知道它并且不会注入它的字段。

    注意:你没有给出任何具体的例子,但看起来你可以很好地使用构造函数注入来代替,它不需要手动注入或在组件中注入方法。如果你有同一个接口的多个实现,你甚至可以看看 Dagger 的多重绑定。

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多