Dagger 2 - 组件依赖于两个组件
Dagger 2 - Component depends on two components
问题:如何使用 Dagger 2 基于 BeansComponent
和 WaterComponent
中的依赖项构建 CoffeeComponent?
ApplicationComponent <- @modules = Earth.module
| |
BeansComponent WaterComponent
\ /
CoffeeComponent
要求: BeansComponent
和 WaterComponent
有各自的作用域。
目前的解决方案:
BeansComponent
将是 ApplicationComponent
的子组件
WaterComponent
将是 ApplicationComponent
的子组件
ApplicationComponent
使用 EarthModule
WaterComponent
和 BeansComponent
使用来自 ApplicationComponent (EarthModule)
的依赖项
可以将 BeansComponent
和 WaterComponent
的所有模块一起包含在 WaterBeansComponent
中,并创建 CoffeeComponent
作为 WaterBeansComponent
的子组件。但是不同的范围是不可能的。
Dagger 2 不支持以图中概述的方式混合作用域。请参阅 this question 尝试解释原因。
此外,如果您正确构建应用程序,则不需要范围多重继承。范围和组件跟踪 生命周期 因此子组件跟踪两个兄弟生命周期没有多大意义。
使用模块可能更好地实现您正在寻找的关注点分离。首先使用模块按功能分组。然后推理将绑定在模块中的依赖项的生命周期,并使用这些知识从您的模块中组合组件。
问题:如何使用 Dagger 2 基于 BeansComponent
和 WaterComponent
中的依赖项构建 CoffeeComponent?
ApplicationComponent <- @modules = Earth.module
| |
BeansComponent WaterComponent
\ /
CoffeeComponent
要求: BeansComponent
和 WaterComponent
有各自的作用域。
目前的解决方案:
BeansComponent
将是 ApplicationComponent
WaterComponent
将是 ApplicationComponent
ApplicationComponent
使用 EarthModule
WaterComponent
和 BeansComponent
使用来自 ApplicationComponent (EarthModule)
可以将 BeansComponent
和 WaterComponent
的所有模块一起包含在 WaterBeansComponent
中,并创建 CoffeeComponent
作为 WaterBeansComponent
的子组件。但是不同的范围是不可能的。
Dagger 2 不支持以图中概述的方式混合作用域。请参阅 this question 尝试解释原因。
此外,如果您正确构建应用程序,则不需要范围多重继承。范围和组件跟踪 生命周期 因此子组件跟踪两个兄弟生命周期没有多大意义。
使用模块可能更好地实现您正在寻找的关注点分离。首先使用模块按功能分组。然后推理将绑定在模块中的依赖项的生命周期,并使用这些知识从您的模块中组合组件。