3

ここで提案されているアーキテクチャを使用して Android アプリを構築したいと考えています。ただし、ガイドに従い、すべてのクラスに短剣を使用した後、次のように要約された循環依存関係が発生しました。

android.app.Application <- (レトロフィット) ServerClient <- UserRepository <- UserViewModel <- UserActivity <- somethingsomething <- android.app.Application

より詳細なバージョンは次のとおりです。

android-client/app/src/main/java/de/njsm/stocks/android/dagger/RootComponent.java:22: error: [Dagger/DependencyCycle] Found a dependency cycle:
public interface RootComponent extends AndroidInjector<Application> {
       ^

      android.app.Application is injected at
          de.njsm.stocks.android.dagger.modules.WebModule.fdsa(a)
      android.app.Application is injected at
          de.njsm.stocks.android.dagger.modules.WebModule.provideServerClient(ctx)
      de.njsm.stocks.android.network.server.ServerClient is injected at
          de.njsm.stocks.android.repo.UserRepository(…, webclient, …)
      de.njsm.stocks.android.repo.UserRepository is injected at
          de.njsm.stocks.android.dagger.modules.ViewModelModule.provideUserViewModel(repo)
      java.util.Map<java.lang.Class<? extends androidx.lifecycle.ViewModel>,javax.inject.Provider<androidx.lifecycle.ViewModel>> is injected at
          de.njsm.stocks.android.dagger.modules.ViewModelModule.viewModelFactory(providerMap)
      androidx.lifecycle.ViewModelProvider.Factory is injected at
          de.njsm.stocks.android.frontend.user.UserActivity.setViewModelFactory(viewModelFactory)
      de.njsm.stocks.android.frontend.user.UserActivity is injected at
          dagger.android.AndroidInjector.inject(T) [de.njsm.stocks.android.dagger.RootComponent → de.njsm.stocks.android.dagger.modules.ActivityModule_ContributeUserActivity.UserActivitySubcomponent]

なぜ問題があるのか​​ 理解しています。私の依存関係はバックエンドからフロントエンドへの方向に従い、バックエンドの「リーフ」で​​は、ファイルシステムにアクセスしてキーストアとルーム DB をロードするために Android コンテキストが必要です。私が疑問に思っているのは、私は単にアーキテクチャのレイアウトに従っているだけなので、これに最初に遭遇することはできないということです。どうすればこのサイクルを断ち切ることができますか? 私のお気に入りのカットは、アクティビティとアプリケーションの間です。AFAIU アプリケーションは Android のアクティビティなしで存在できるからです。

アクティビティを挿入するために、短剣ガイドに従いました。残りは単純な (そして機能する) 短剣構成です。

4

0 に答える 0