NB. Этот вопрос может быть аналогичен другим вопросам, но он обеспечивает лучшее объяснение с помощью дополнительного кода и направлен на поиск решения проблемы, решения, представленные в других вопросах, не подходят.
Всего несколько дней назад я начал разрабатывать модульное приложение для Android. Я использую Dagger 2 для обработки внедрения зависимостей, и в настоящее время я сталкиваюсь со странным поведением.
У меня есть основной модуль приложения и три других модуля:
Core_Module
: предоставляет сторонние библиотеки и уровень хранения.
Localisation_Module
: он предоставляет хранилище для получения локализованной информации.
Configuration_Module
: он предоставляет хранилище для получения параметров конфигурации.
И Configuration_Module
, и Localisation_Module
зависят от Core_Module
.
CoreComponent:
@Singleton
@Component(modules = [ApplicationModule::class, NetworkingModule::class, RepositoryModule::class])
interface CoreComponent {
@Named("retrofit")
fun retrofit(): Retrofit
@Named("retrofitWithCache")
fun retrofitWithCache(): Retrofit
fun storageRepository(): StorageRepository
}
LocalisationComponent:
@Component(modules = [ServiceModule::class, RepositoryModule::class], dependencies = [CoreComponent::class])
@LocalisationScope
interface LocalisationComponent {
fun localisationService(): LocalisationService
fun localisationRepository(): LocalisationRepository
}
ConfigurationComponent
@Component(modules = [ServiceModule::class, RepositoryModule::class], dependencies = [CoreComponent::class])
@ConfigurationScope
interface ConfigurationComponent {
fun configurationService(): ConfigurationService
fun configurationRepository(): ConfigurationRepository
}
ApplicationComponent
@Component(dependencies = [LocalisationComponent::class, ConfigurationComponent::class])
@ApplicationScope
abstract class ApplicationComponent {
abstract fun inject(mainActivity: MainActivity)
}
MainApplication
class MainApplication : Application() {
lateinit var applicationComponent: ApplicationComponent
override fun onCreate() {
super.onCreate()
this.registerDependencies()
}
private fun registerDependencies() {
val coreModule = CoreModule(applicationContext)
applicationComponent = DaggerApplicationComponent.builder()
.localisationComponent(LocalisationModule(coreModule).localisationComponent)
.configurationComponent(ConfigurationModule(coreModule).configurationComponent)
.build()
}
}
Я решил спроектировать эту архитектуру, потому что хочу разделить функциональные возможности на независимые, взаимозаменяемые модули, чтобы каждый из них содержал все необходимое для выполнения определенной функциональности и экспорта отдельных модулей в другие приложения.
К сожалению, я получил сообщение о том, что компонент Dagger не может зависеть от нескольких компонентов области действия.
Кто-нибудь знает, как решить эту проблему?