java – Dagger2组件通用注入方法

前端之家收集整理的这篇文章主要介绍了java – Dagger2组件通用注入方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我将我的应用程序从Dagger1.0转换为dagger2.0,并且有一个带有许多void inject(活动/片段/接收器/ etc对象)方法的app组件.

使用dagger 1.0我只能做objectGraph.inject(Object对象),但现在我的组件必须为每个接受注入依赖关系的类提供一个方法.

为什么我不能只拥有一个具有一种方法的组件:< T>空穴注入(T t); ?

以供参考:
我的组件现在:


public interface AppComponent {

    void inject(MyFirstActivity activity);

    void inject(MySecondActivity activity);

    void inject(MyFirstFragment fragment);

    void inject(MySecondFragment fragment);

    ...
}

我想要的组件:


public interface AppComponent {
   
最佳答案

Why can’t I just have a component that has one method: ?

因为dagger-2使用代码生成并且需要在编译时知道类型信息.没有它,就没有办法分辨出T需要哪些依赖 – 因此代码生成是不可能的.

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

注入子类也是如此.您可以在组件文档中查看段落A note about covariance.因为超类类型是已知的,所以dagger可以在超类中注入成员,但它不会注入潜在子类型的成员.同样,因为dagger-2依赖于编译时代码生成,所以这是不可能的.

猜你在找的Android相关文章