带有匕首的多模块项目:组件依赖于多个范围组件

时间:2018-05-01 06:08:07

标签: android dagger-2 multi-module

注意:似乎有很多关于类似问题的问题,但是这个问题更具体针对多模块应用程序,以前建议的解决方案不起作用

我正在为每个架构层(即数据,域,演示文稿)启动一个带有一个模块(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作为范围。

我试图通过不创建DataComponentDomainComponent来避免组件依赖,而是让AppComponent引用DataModuleDomainModule,如下所示。

@PerApp
@Component(modules = [DataModule::class, DomainModule::class])
AppComponent {
   fun tokenRepository(): TokenRepository
   fun jobRepository(): JobRepository
   fun somethingSingleton(): Something
}

然而,除非Presentation模块声明(gradle)与数据库或缓存库等数据相关的库(用于实现存储库)的依赖关系,否则这不起作用。我觉得这会破坏模块化的想法,因为这些依赖关系不应该是Presentation层的关注点。

我想知道是否有人之前有同样的问题,你是如何解决的?

由于

0 个答案:

没有答案