1
我在Android中使用Dagger2作爲我的依賴注入器。我面臨的問題是ActivityScope
中的模塊數量。 所以像任何其他項目我有兩種類型的模塊。在Dagger2中只包含ActivityScope模塊一次
Singleton
S(其中包括只有一次,在我ApplicationComponent
ActivityScope
S(其中包括每個ActivityComponent
)
隨着項目的展開我的ActivityScope
模塊的數量都在增加因此每次添加新模塊的時間越來越多,而且每個ActivityComponent
包含的模塊數量都使得代碼非常難讀。我正在尋找一種方法來包含所有活動中包含的模塊只有o (仍然在ActivityScope
),所以每個ActivityComponent
只需要提到它的顯式模塊。
這裏是我的代碼部分可能會有所幫助:
ApplicationComponent.java
@Singleton
@Component(modules = {
ContextModule.class,
AppLangModule.class,
...
AndroidSupportInjectionModule.class})
public interface ApplicationComponent extends AndroidInjector<MainApplication> {
@Component.Builder
abstract class Builder extends AndroidInjector.Builder<MainApplication> {
abstract Builder contextModule(ContextModule contextModule);
abstract Builder appLangModule(AppLangModule appLangModule);
...
}
}
ApplicationModule.java
@Module
abstract class ApplicationModule {
@ActivityScope
@ContributesAndroidInjector(modules ={
CategoryRepositoryModule.class,
DictionaryRepositoryModule.class,
TranslationRepositoryModule.class,
StatsRepository.StatsRepositoryModule.class,
WordCardRepositoryModule.class,
WordCardUserDataRepository.CouchBaseCardRepositoryModule.class,
StatsManager.StatsManagerModule.class,
WordCardIdProviderFactoryModule.class,
CustomSubCategoryRepository.CustomSubCategoryRepositoryModule.class,
ConfigurationRepository.ConfigurationRepositoryModule.class})
abstract Activity1 provideActivity1();
@ActivityScope
@ContributesAndroidInjector(modules ={
CategoryRepositoryModule.class,
DictionaryRepositoryModule.class,
TranslationRepositoryModule.class,
StatsRepository.StatsRepositoryModule.class,
WordCardRepositoryModule.class,
WordCardUserDataRepository.CouchBaseCardRepositoryModule.class,
StatsManager.StatsManagerModule.class,
WordCardIdProviderFactoryModule.class,
CustomSubCategoryRepository.CustomSubCategoryRepositoryModule.class,
ConfigurationRepository.ConfigurationRepositoryModule.class})
abstract Activity2 provideActivity2();
...
}
當然,並非所有的我活動需要這麼多模塊(大部分模塊都是其他模塊需要的S)。
是否使用構造器注入?這看起來很像你爲模塊中的每一個類調用'new MyClass()'。 –
@DavidMedenjak,是和否:D,我的組件不使用構造函數注入。但是這些模塊是在它們的Provide方法上創建的(如果這就是你的意思)並且通常在構造函數 –
中具有依賴關係。提供方法是_not_構造函數注入。看看這個答案:https://stackoverflow.com/a/45422229/1837367 –