从多个模块创建组件
Dagger 2 支持从多个模块创建组件。你可以这样创建组件:
@Singleton
@Component(modules = {GeneralPurposeModule.class, SpecificModule.class})
public interface MyMultipleModuleComponent {
void inject(MyFragment myFragment);
void inject(MyService myService);
void inject(MyController myController);
void inject(MyActivity myActivity);
}
然后可以按如下方式实现两个参考模块 GeneralPurposeModule
和 SpecificModule
:
GeneralPurposeModule.java
@Module
public class GeneralPurposeModule {
@Provides
@Singleton
public Retrofit getRetrofit(PropertiesReader propertiesReader, RetrofitHeaderInterceptor headerInterceptor){
// Logic here...
return retrofit;
}
@Provides
@Singleton
public PropertiesReader getPropertiesReader(){
return new PropertiesReader();
}
@Provides
@Singleton
public RetrofitHeaderInterceptor getRetrofitHeaderInterceptor(){
return new RetrofitHeaderInterceptor();
}
}
SpecificModule.java
@Singleton
@Module
public class SpecificModule {
@Provides @Singleton
public RetrofitController getRetrofitController(Retrofit retrofit){
RetrofitController retrofitController = new RetrofitController();
retrofitController.setRetrofit(retrofit);
return retrofitController;
}
@Provides @Singleton
public MyService getMyService(RetrofitController retrofitController){
MyService myService = new MyService();
myService.setRetrofitController(retrofitController);
return myService;
}
}
在依赖注入阶段,组件将根据需要从两个模块中获取对象。
这种方法在模块化方面非常有用。在该示例中,存在用于实例化诸如 Retrofit
对象(用于处理网络通信)和 PropertiesReader
(负责处理配置文件)的组件的通用模块。还有一个特定的模块,用于处理与特定应用程序组件相关的特定控制器和服务类的实例化。