[英]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.