注意:似乎有很多关于类似问题的问题,但是这个问题更具体针对多模块应用程序,以前建议的解决方案不起作用
我正在为每个架构层(即数据,域,演示文稿)启动一个带有一个模块(Android工作室模块)的多模块项目,并使用Dagger 2在整个应用程序中提供依赖注入。目前,每个模块都有一个Dagger组件,它将每个模块的依赖关系暴露给其他模块。简化版本如下所示:
@Singleton
@Component(modules=[DataModule::class])
DataComponent {
fun tokenRepository(): TokenRepository
fun jobRepository(): JobRepository
}
@Singleton
@Component(modules=[DomainModule::class])
DomainComponent {
fun somethingSingleton(): Something
}
// In Presentation Module
@PerApp
@Component(dependencies = [DataComponent::class, DomainComponent::class])
AppComponent {
fun tokenRepository(): TokenRepository
fun jobRepository(): JobRepository
fun somethingSingleton(): Something
}
我收到一条错误,说Dagger组件不允许依赖多个范围的组件。但是,由于Data和Domain组件都需要提供单例(如令牌存储库),因此我必须在@Singleton @Provide fun getTokenRepository...
中使用类似DataModule
的内容,这需要DataComponent
作为范围。
我试图通过不创建DataComponent
和DomainComponent
来避免组件依赖,而是让AppComponent
引用DataModule
和DomainModule
,如下所示。
@PerApp
@Component(modules = [DataModule::class, DomainModule::class])
AppComponent {
fun tokenRepository(): TokenRepository
fun jobRepository(): JobRepository
fun somethingSingleton(): Something
}
然而,除非Presentation模块声明(gradle)与数据库或缓存库等数据相关的库(用于实现存储库)的依赖关系,否则这不起作用。我觉得这会破坏模块化的想法,因为这些依赖关系不应该是Presentation层的关注点。
我想知道是否有人之前有同样的问题,你是如何解决的?
由于