当你在 Dagger 中“包含”来自另一个模块的模块时会发生什么?

Seb*_*iot 3 dagger

匕首文档页说:

要充分利用编译时验证,请创建一个包含应用程序所有模块的模块。

这留下了一些需要回答的问题:

  • 包含其他模块的实际效果是什么?(至少,似乎包含的模块不需要直接实例化)
  • 不同模块多次包含一个模块是否合法/可能?那会发生什么?

Chr*_*ber 5

文档需要改进。

Includes 是字面包含 - 包含模块的所有 @Provides 方法,完全可传递,被收集在一起并被视为(实际上)被分析模块的一部分。所以:

@Module(includes = BModule.class)
class AModule {
  @Provides A provideA(...) { ... }
}

@Module
class BModule {
  @Provides B provideB(...) { ... }
}
Run Code Online (Sandbox Code Playgroud)

在功能上与

@Module
class JointModule {
  @Provides A provideA(...) { ... }
  @Provides B provideB(...) { ... }
}
Run Code Online (Sandbox Code Playgroud)

此外,模块包含会折叠重复项。所以如果你有:

@Module(includes = {BModule.class, CModule.class})
class AModule { ... }

@Module(includes = CModule.class)
class BModule { ... }

@Module
class CModule { ... }
Run Code Online (Sandbox Code Playgroud)

它将从AModule+ BModule+产生一组绑定(重复数据删除)CModule