在Java的Dagger中,addsTo和includes之间有什么区别?

时间:2014-12-31 20:59:35

标签: android dagger

我不确定区别是什么?我什么时候应该使用哪个?

http://square.github.io/dagger/javadoc/index.html

1 个答案:

答案 0 :(得分:9)

includes表示当前模块由哪些模块组成。例如,它对于静态聚合所有模块非常有用:

@Module(
  includes = { AndroidModule.class, NetworkModule.class, StorageModule.class }
)
public class RootModule() {
}

// other file
objectGraph = ObjectGraph.create(new RootModule());

而不是动态:

objectGraph = ObjectGraph.create(
     new AndroidModule(), 
     new NetworkModule(), 
     new StorageModule());

因此,充分利用编译时图验证。

addsTo特别涉及父子模块的关系。它表示模块是某个模块的扩展,用作.plus()参数。例如。有两个模块:

@Module(
  //...
)
public class ParentModule() {
  //...
}

@Module(
  addsTo = { ParentModule.class },
  //...
)
public class ChildModule () {
  //...
}

此配置意味着在parentGraph = ObjectGraph.create(new ParentModule());之后,您可以在代码中的某处执行childGraph = parentGraph.plus(new ChildModule());来创建扩展的,通常是短命的子图。