如何在Dagger2中使用界面进行注入

时间:2019-02-05 06:52:47

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

考虑以下结构:

public class WaterWorld implements IWorld {

    ...
    @Inject
    CreationMode creationMode;

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

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

    void inject(IWorld world);

我以这种方式获取null。但是,如果我尝试在以下

中执行此操作
    void inject(WaterWorld world);

然后它起作用。但是,我有许多实现IWorld的类。我想这样做:void inject(IWorld world);该怎么做?还是有其他通用解决方案?

1 个答案:

答案 0 :(得分:0)

否,Dagger将始终注入inject(Foo foo)方法中指定的类。它将注入父类型中的对象,但注入子类中的对象。
Dagger使用指定的类型来生成用于注入的代码,但是如果您未指定特定的类,则Dagger根本不了解它,也不会注入其字段。

注意:您没有提供任何特定的示例,但是看起来您可以很好地使用构造函数注入,而无需在组件中进行手动注入或注入方法。如果您对同一接口有多种实现,您甚至可以看看Dagger的多重绑定。