Android 如何使用匕首2@提供服务

Android 如何使用匕首2@提供服务,android,dagger-2,mvp,Android,Dagger 2,Mvp,我在MVP应用程序中使用Dagger2作为DI。应用程序有不同的服务,负责发出请求,如获取产品数据或执行订单 大多数情况下,每个屏幕都有自己的@组件界面和@模块类,在这些模块中提供了相应的演示者 在某些情况下,服务仅由一个演示者使用。在本例中,我只是在该模块中提供它。但我有很多服务,它们在不同的演示者中被多次使用。目前,我已将它们全部放在ApplicationModule中,在ApplicationComponent中公开它们,并在“screen components”(屏幕组件)中添加对App

我在MVP应用程序中使用Dagger2作为DI。应用程序有不同的服务,负责发出请求,如获取产品数据或执行订单

大多数情况下,每个屏幕都有自己的
@组件
界面和
@模块
类,在这些模块中提供了相应的演示者

在某些情况下,服务仅由一个演示者使用。在本例中,我只是在该模块中提供它。但我有很多服务,它们在不同的演示者中被多次使用。目前,我已将它们全部放在
ApplicationModule
中,在
ApplicationComponent
中公开它们,并在“screen components”(屏幕组件)中添加对
ApplicationComponent
的依赖项(如果演示者需要其中一项服务)。现在的问题是,几乎每个组件都依赖于
ApplicationComponent
,我认为这是错误的

我怎样才能以最好的方式处理这件事?我是否应该为每个服务创建一个模块,并将其添加到需要它的组件中?我还想记住范围,并认为应该将服务添加到
@Singleton
范围中

应用程序组件

@Singleton
@组件(模块={ApplicationModule.class,ContextModule.class}
公共接口应用程序组件{
无效注入(我的申请);
Context getContext();
ProductDataService getProductDataService();
AnalyticsService getAnalyticsService();
CartService getCartService();
...
}
应用程序模块

@模块
公共类应用程序模块{
@提供
静态ProductDataService provideProductDataService(ProductDataServiceImpl ProductDataService){
返回productDataService;
}
@提供
静态分析服务提供分析服务(分析服务impl分析服务){
返回分析服务;
}
@提供
静态CartService ProviderCartService(CartServiceImpl CartService){
回程服务;
}
...
}
ProductDataServiceImpl

@Singleton
公共类ProductDataServiceImpl实现ProductDataService{
私有网络服务;
@注入
公共产品DataServiceImpl(WebService WebService){
this.webService=webService;
}
...
}
从属组件

@组件(模块=DependentModule.class,依赖项=ApplicationComponent.class)
公共接口依赖组件{
无效注入(MyFragment片段)
}
从属模块

@模块
公共类从属模块{
私有MyView-MyView;
公共从属模块(MyView MyView){
this.myView=myView;
}
@提供
公共MyPresenter提供MyPresenter(ProductDataService ProductDataService,AnalyticsService AnalyticsService){
返回新的MyPresenterImpl(myView、productDataService、analyticsService)
}
}