繁体   English   中英

Dagger2组件通用注入方法

[英]Dagger2 component generic inject method

我将我的应用程序从Dagger1.0转换为dagger2.0,并且有一个包含许多void inject(Activity/Fragment/Receiver/etc object)方法的应用程序组件。

使用dagger 1.0,我只能执行objectGraph.inject(Object object)但是现在我的组件必须为每个要注入依赖项的类提供一个方法。

为什么我不能只有一个具有一种方法的组件: <T> void inject(T t);

供参考: 我的组件现在:


public interface AppComponent {

    void inject(MyFirstActivity activity);

    void inject(MySecondActivity activity);

    void inject(MyFirstFragment fragment);

    void inject(MySecondFragment fragment);

    ...
}

我想要的组件:


public interface AppComponent {
   <T> void inject(T object);
}

为什么我不能只有一个具有一种方法的组件: <T> void inject(T t);

因为dagger-2使用代码生成,并且需要在编译时知道类型信息。 没有它,就无法确定T需要哪些依赖项-因此将无法生成代码。

如果编译第一个组件并检查生成的Dagger*Component源代码,您将看到每个inject方法都具有自己的工厂方法,并提供给定类型的所有依赖关系。

这与注入子类相同。 您可以在组件文档中查看有关协方差的说明A段落。 由于超类类型是已知的,因此dagger可以注入超类中的成员,但不会注入潜在子类型的成员。 同样,由于dagger-2依赖于编译时代码生成,因此这是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM