2017-07-11 42 views
1

问:如何使用Dagger 2基于BeansComponentWaterComponent之间的依赖性构建CoffeeComponent?匕首2 - 组件取决于两个组件

ApplicationComponent <- @modules = Earth.module | | BeansComponent WaterComponent \ / CoffeeComponent

要求:BeansComponentWaterComponent有单独的范围。

解决方案至今

BeansComponent将是ApplicationComponent

WaterComponent子组件将是ApplicationComponent

ApplicationComponent子组件使用EarthModule

WaterComponentBeansComponent使用依赖形成的从ApplicationComponent (EarthModule)

这是可能的IE中包括的BeansComponentWaterComponent所有模块一起WaterBeansComponent创造CoffeeComponentWaterBeansComponent子组件。但是不同的范围是不可能的。

+2

我不认为你可以在这样的范围内有多重继承。看到我的答案[这里](https://stackoverflow.com/q/44157859/5241933) –

+0

优秀的答案!感谢那。您想在接受的答案中引用此内容吗?还是应该关闭它? – blang

+0

我很高兴它帮助!当我回家时,我会为你写一个答案 –

回答

1

Dagger 2不支持以图中所列方式混合示波器。请参阅this question,试图解释原因。此外,如果你正确地构建你的应用程序,你不应该需要范围多重继承。范围和组件跟踪生命周期因此,对于子组件跟踪两个兄弟生命周期没有多大意义。

使用模块可能会更好地实现您正在寻找的问题的分离。首先使用模块按功能分组。然后推理将被绑定到模块中的依赖关系的生命周期,并使用这些知识来组合模块中的组件。