【发布时间】:2017-10-02 16:06:36
【问题描述】:
我在 多层、多库 Android SDK 项目中使用 dagger 2。
我正在不同层(数据、业务逻辑、表示等)上开发许多不同的库,并使用 dagger 将它们粘合在一起。
我最重要的要求是架构的每个库都应该可以独立使用(及其依赖的组件),并且开发人员应该决定在他想要的任何层上构建:
例如:
- 使用以下所有内容重写所有表示层
- 随意替换堆栈的任何部分以增强或更改行为
现在我已经为每个库创建了一个具有自定义范围的 Dagger 组件,但有时我有一个依赖于 2-3 个其他组件的组件,并且 Dagger 抱怨只有 1 个依赖项组件应该是作用域的。 (Es. 域层使用服务组件从公司服务获取数据,使用传感器组件获取设备传感器数据/连接性或其他)。
我无法摆脱作用域,因为我需要对这些组件进行作用域/单例。
我目前的解决方法是将依赖组件传递给模块构造函数,但这看起来像是一种解决方法,我想知道用 Dagger 2 处理这种需求的正确方法是什么。
复杂性也不能很好地扩展,并且替换中间的一块需要扩展替换实现的模块之一,这对用户来说根本不友好。
我已经阅读了有关子组件的信息,但看起来除非您为每个子组件编写一个组件,否则它们不能单独使用,它们还为实际实现声明模块,因此它们不能被其他一些实现替换。
有人可以用 dagger 分享他们的架构或详细阐述这些概念,重点关注一个库项目,以供其他开发人员用来组装零件和重用组件吗?
(这个问题has been asked 最初在 dagger2 问题跟踪器上,但已关闭,指向我堆栈溢出 - 仅使用模块也不合适,因为这些要求库的用户知道要组装哪个模块和我如何以及我无法设置不强制执行特定实现的模块依赖项)
【问题讨论】:
标签: android architecture android-library dagger-2