我是依赖注入的新手,我甚至不确定这是否是正确的方法。
我要做的是让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);
}
}
这两个组件可以共享相同的依赖关系吗?实现这个的最佳方法是什么?
谢谢
答案 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);
}