Java 匕首2,两个从属组件不能共享同一范围
作为一个问题,我知道匕首2从以下链接 两个依赖组件不能共享同一作用域 但是,我不清楚下面链接中提到的原因 杰克沃顿说… 具有相同作用域的两个组件可能会破坏作用域 从你的例子来看: Component1 c1=匕首_Component1.create() Component2 c2_a=Dagger_Component2.builder().component1(c1.build() Component2 c2_b=Dagger_Component2.builder().component1(c1.build() c1有单例,这些单例在c2_a和c2_b之间使用,但组件2中的单例在c2_a和c2_b中得到单独的实例 它是如何破碎的## c2_a将修改c1的范围,或者它将如何打破Java 匕首2,两个从属组件不能共享同一范围,java,android,dagger-2,Java,Android,Dagger 2,作为一个问题,我知道匕首2从以下链接 两个依赖组件不能共享同一作用域 但是,我不清楚下面链接中提到的原因 杰克沃顿说… 具有相同作用域的两个组件可能会破坏作用域 从你的例子来看: Component1 c1=匕首_Component1.create() Component2 c2_a=Dagger_Component2.builder().component1(c1.build() Component2 c2_b=Dagger_Component2.builder().component1(
谢谢大家。假设组件1和组件2的作用域名为@AwesomeScope 假设组件2为@AwesomeScope提供了一个香蕉 当c1被创建时,它会创建一个很棒的范围。当c2_a根据c1创建时,它不会创建awesome作用域,因为c1已经有awesome作用域。相反,c2_a共享c1创建的可怕范围 创建c2_b时,它还共享c1创建的范围,原因与上面的c2_a相同 从上面,我们可以推断c2_b和c2_a共享由c1创建的相同范围 当c2_a试图为Aawesome范围创建一个香蕉时,它会遍历依赖项,以查看Aawesome范围中还有另一个香蕉。c_2a只看到c1有可怕的范围。由于c1没有香蕉,c_2a创建香蕉并将其保存在c_2a实例中,因为c_2a被定义为有一个很棒的作用域 创建c2_b时也会发生相同的事件,因为c2_b无法到达相同范围内的c2_a并检查c2_a是否有香蕉。现在c1_a和c2_b都有香蕉,这意味着在一个可怕的范围内有两个香蕉。因为每个可怕的范围中只应该存在一个香蕉,所以我们可以得出结论,它打破了范围