從多個模組建立元件
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
(負責處理配置檔案)的元件的通用模組。還有一個特定的模組,用於處理與特定應用程式元件相關的特定控制器和服務類的例項化。