Dagger中addsTo VS include in subObjectGraphs

在Dagger中遇到要注入新的module的时候,需要调用existingObjectGraph.plus(new SomeModule());来告诉ObjectGraphs有新的Module需要注入。
如果新注入的Module依赖于原existingObjectGraph中的某一个Module, 从原理上可以使用includes和addsTo两种方式,但是两个具体的区别是:

  • includes表示原Module的也会与新的Module生存在同一个subObjectGraphs, 如果没有传递一个现有的实例Dagger会重新实例化。
  • addsTo表示新的Module希望在原existingObjectGraph被添加,但是Dagger不会自动添加这个Module。当新的module依赖于原existingObjectGraph中的某一个Module,新的Module可以直接从existingObjectGraph中取到所需要的依赖,如果这个依赖项是单例的,他也会在subObjectGraphs中保持单例。