Dagger2 (поддержка Android) в шаблоне одиночного действия (навигация) - PullRequest
1 голос
/ 25 мая 2020

Недавно я пытаюсь реорганизовать свой небольшой проект, чтобы использовать один шаблон Activity с Androidx Navigation, но я столкнулся с проблемой, связанной с внедрением зависимостей, не уверен, что мое понимание dagger2 правильно или нет, предположим, что у меня есть 3 области действия

  1. область применения
  2. область действия 1
  3. область действия 2

Область приложения, имеющая компонент и несколько модулей, например:

@Singleton
@Component(
modules = [
    AndroidInjectionModule::class,
    Feature1ActivityModule::class,
    Feature2ActivityModule::class
])
interface AppComponent : AndroidInjector<MyApplication> {

   @Component.Factory
   interface Factory {
       fun create(@BindsInstance application: MyApplication): AppComponent
   }
}

Объем функции 1, имеющий действие, 2 фрагмента и модуль, который содержит, например, viewModel, репозиторий ... и т. Д. c

@Scope
@MustBeDocumented
@Retention(AnnotationRetention.RUNTIME)
annotation class Feature1Scope

@Module
abstract class Feature1ActivityModule {

   @Feature1Scope
   @ContributesAndroidInjector(
       modules = [
           Feature1FragmentsModule::class,
           Feature1Module::class]) // such as viewModel, repository ... etc
   abstract fun contributeFeature1Activity(): Feature1Activity
}

@Module
abstract class Feature1FragmentsModule {

   @ContributesAndroidInjector
   abstract fun contributeFeature1FirstFragment(): Feature1FirstFragment

   @ContributesAndroidInjector
   abstract fun contributeFeature2SecondFragment(): Feature2SecondFragment
}

функция 2 в основном имеет ту же структуру, что и функция 1, но как заменить Feature1ActivityModule для достижения единого шаблона активности? Создайте новый субкомпонент интерфейса extension AndroidInjector<T>?

...