Dagger 2具有相同依赖性的多个组件

时间:2016-08-13 05:59:38

标签: java android dependency-injection dagger-2

我是依赖注入的新手,我甚至不确定这是否是正确的方法。

我要做的是让2个不同的组件共享相同的依赖项。例如,我有我的彩票组件+其模块:

@PerActivity
@Component(dependencies = NetworkComponent.class,
        modules = {
                LotteryModule.class
        })
public interface LotteryComponent {
    void inject(DashboardFragment fragment);

    LotteryApiInterface lotteryApiInterface();
}

@Module
public class LotteryModule {

    @Provides
    @PerActivity
    public LotteryApiInterface providesLotteryApiInterface(Retrofit retrofit) {
        return retrofit.create(LotteryApiInterface.class);
    }
}

这里是支出组件+其模块:

@PerActivity
@Component( dependencies = NetworkComponent.class, modules = SpendingModule.class )
public interface SpendingComponent {
    void inject(DashboardFragment fragment);

    SpendingApiInterface spendingApiInterface();
}


@Module
public class SpendingModule {

    @Provides
    @PerActivity
    public SpendingApiInterface providesSpendingApiInterface(Retrofit retrofit) {
        return retrofit.create(SpendingApiInterface.class);
    }
}

这两个组件可以共享相同的依赖关系吗?实现这个的最佳方法是什么?

谢谢

1 个答案:

答案 0 :(得分:1)

是的,2个组件可以共享相同的依赖关系,但要确保依赖关系不是多余的。

在您的情况下,我没有看到创建两个组件的任何优势,您可以创建一个组件和一个将返回LotteryApiInterface或SpendingApiInterface服务的模块。

如果没有其他任何地方使用LotteryApiInterface或SpendingApiInterface服务,那么您可以将组件作为NetworkComponent的子组件,这样您就不需要在Component中公开您的依赖项。

<强>实施例

@PerActivity
@Subcomponent( modules = LotterySpendingModule.class )
public interface LotterySpendingComponent {
    void inject(DashboardFragment fragment);
}

并在NetworkComponent

public interface NetworkComponent {
    LotterySpendingComponent plus(LotterySpendingModule module);
}