如何让Guice模块使用另一个Guice模块?

Noe*_*Yap 27 java guice

假设我有一个Guice模块ProdModule,我想依赖其他GuiceModule,ProdDbModule和ProdPubSubModule.我如何实现ProdModule的configure()?

Jer*_*emy 44

您将安装其他模块

protected void configure(){
    install(new ProdDbModule());
    install(new ProdPubSubModule());
    // etc.
}
Run Code Online (Sandbox Code Playgroud)


Col*_*inD 23

虽然使用起来很方便install,但install只要在创建时提供所有必需的模块,您甚至不需要其他模块Injector:

Injector injector = Guice.createInjector(new ProdDbModule(),
    new ProdPubSubModule(), new ProdModule());
Run Code Online (Sandbox Code Playgroud)

这可以让您更灵活地更改入口点类中的其中一个模块,而无需ProdModule自行修改.您还可以在模块中指明它需要使用这些requireBinding方法提供的其他模块的绑定.


Ale*_*lex 7

您可以Modules.combine用来创建一个包含所有其他模块的新模块。(请参阅此链接

区别:

  • 这不受紧密耦合模块的影响 install()
  • 这将创建一个Module注入器,而不是注入器,这意味着您可以轻松地向注入器添加不同的模块。

import com.google.inject.util.Modules;
Module module = Modules.combine(new ProdDbModule(),
  new ProdPubSubModule(), new ProdModule());
Injector injector = Guice.createInjector(module);
Run Code Online (Sandbox Code Playgroud)

  • 没有。如果您想在多个位置共享相同的模块列表,并且可能想要模块树而不是列表,则Combine是很有用的。 (2认同)