在我目前的项目中,我们有ApplicationComponent
,其中包含各种模块,包括NetworkModule
:
DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.networkModule(new NetworkModule())
.apiModule(new ApiModule())
.build();
我现在想要设置一个UserServices
模块,该模块将至少提供一个UserServices
对象,该对象需要其他模块提供的一些配置。例如,NetworkModule
提供了HttpLoggingInterceptor.Level
,用于应用中的其他网络调用,我想在UserServices
调用中使用相同的内容。
NetworkModule
的调试版本的示例:
@Module
public class NetworkModule extends BaseNetworkModule {
HttpLoggingInterceptor.Level getHttpLoggingInterceptorLevel() {
return HttpLoggingInterceptor.Level.BODY;
}
}
为了封装,我希望将UserServices
提供在自己的模块中。
如何设置UserServices
模块,使其可以包含在同一个组件中,并且可以访问NetworkModule
中的“提供”,以配置它提供的UserServices
对象?
由于
答案 0 :(得分:1)
我通过一些试验和错误来解决这个问题。如果依赖模块已经包含在component
中,那么我只需将includes
参数添加到@Module
注释中:
@Module(includes= {
NetworkModule.class,
ApiModule.class
})
在我的例子中,依赖模块和其他一些模块在几个地方使用,并且在component
本身中都需要独立模块。幸运的是,似乎Dagger会在同一组件中的模块之间为我添加内容。所以在这种情况下我真的不需要做任何特别的事情 - 就在组件中这样做:
@Singleton
@Component(modules = {
ApplicationModule.class,
NetworkModule.class,
SchedulerModule.class,
ApiModule.class,
UserServicesModule.class
})
答案 1 :(得分:0)
您可以将网络模块作为依赖项添加到UserServices模块,或将网络组件作为依赖组件添加到UserServices组件。如果作为依赖组件添加,您必须在网络组件中提及提供程序。