1
私はアンドロイドの依存性インジェクタとしてDagger2を使用しています。私が直面している問題は、モジュール数がActivityScope
です。 他のプロジェクトと同様に、2種類のモジュールがあります。一度だけ、プロジェクトが展開されるように、各ActivityComponent
に含まれている私のApplicationComponent
ActivityScopeモジュールをDagger2に一度だけ含めてください
ActivityScope
S()に私ActivityScope
モジュールの数が増加しているが含まれている
Singleton
S(さらに、新しいモジュールが追加されるたびにますます時間が増えています。さらに、ActivityComponent
に含まれるモジュールの数は、コードを非常に読みにくくしています。すべてのアクティビティに含まれるモジュールを含める方法を探しています唯一のo nce(まだ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 –