注意:这个问题可能类似于其他问题,但它提供了一个更好的解释与附件代码,旨在找到问题的解决方案,其他问题中提供的解决方案是不合适的。
就在几天前,我开始开发一个Android模块化应用程序。我使用Dagger 2来处理依赖注入,我目前面临着一个奇怪的行为。我有我的主应用程序模块,以及其他三个模块:
Core_Module
:它公开第三方库和存储层。
Localisation_Module
:它公开一个存储库以获取本地化信息。
Configuration_Module
:它公开一个存储库以获取配置参数。
两者并依赖于 。Configuration_Module
Localisation_Module
Core_Module
核心组件:
@Singleton
@Component(modules = [ApplicationModule::class, NetworkingModule::class, RepositoryModule::class])
interface CoreComponent {
@Named("retrofit")
fun retrofit(): Retrofit
@Named("retrofitWithCache")
fun retrofitWithCache(): Retrofit
fun storageRepository(): StorageRepository
}
本地化组件:
@Component(modules = [ServiceModule::class, RepositoryModule::class], dependencies = [CoreComponent::class])
@LocalisationScope
interface LocalisationComponent {
fun localisationService(): LocalisationService
fun localisationRepository(): LocalisationRepository
}
配置组件
@Component(modules = [ServiceModule::class, RepositoryModule::class], dependencies = [CoreComponent::class])
@ConfigurationScope
interface ConfigurationComponent {
fun configurationService(): ConfigurationService
fun configurationRepository(): ConfigurationRepository
}
应用程序组件
@Component(dependencies = [LocalisationComponent::class, ConfigurationComponent::class])
@ApplicationScope
abstract class ApplicationComponent {
abstract fun inject(mainActivity: MainActivity)
}
主要应用
class MainApplication : Application() {
lateinit var applicationComponent: ApplicationComponent
override fun onCreate() {
super.onCreate()
this.registerDependencies()
}
我决定设计这个架构,因为我想将功能分离成独立的、可互换的模块,以便每个模块都包含执行特定功能并将单个模块导出到其他应用程序所需的一切。
不幸的是,我收到一个错误,说Dagger组件不允许依赖于多个作用域的组件。有谁知道如何面对这种问题?
胡子哥哥
相关分类