Недавно я пытаюсь реорганизовать свой небольшой проект, чтобы использовать один шаблон Activity с Androidx Navigation, но я столкнулся с проблемой, связанной с внедрением зависимостей, не уверен, что мое понимание dagger2 правильно или нет, предположим, что у меня есть 3 области действия
- область применения
- область действия 1
- область действия 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>
?