【发布时间】:2011-10-30 23:54:36
【问题描述】:
假设我有一个 Guice 模块 ProdModule,我想依赖其他 GuiceModule、ProdDbModule 和 ProdPubSubModule。我将如何实现 ProdModule 的 configure()?
【问题讨论】:
假设我有一个 Guice 模块 ProdModule,我想依赖其他 GuiceModule、ProdDbModule 和 ProdPubSubModule。我将如何实现 ProdModule 的 configure()?
【问题讨论】:
你会install你的其他模块
protected void configure(){
install(new ProdDbModule());
install(new ProdPubSubModule());
// etc.
}
【讨论】:
虽然使用install 很方便,但您甚至不需要install 其他模块,只要您在创建Injector 时提供所有必要的模块即可:
Injector injector = Guice.createInjector(new ProdDbModule(),
new ProdPubSubModule(), new ProdModule());
这可以让您更灵活地只更改入口点类中的这些模块之一,而无需修改 ProdModule 本身。您还可以使用requireBinding 方法在模块中指示它需要其他模块提供哪些绑定。
【讨论】:
您可以使用Modules.combine 创建一个包含所有其他模块的新模块。 (见this link)
区别:
install()这样的紧密耦合模块的影响
Module 而不是注入器,这意味着您可以轻松地向注入器添加不同的模块。import com.google.inject.util.Modules;
Module module = Modules.combine(new ProdDbModule(),
new ProdPubSubModule(), new ProdModule());
Injector injector = Guice.createInjector(module);
【讨论】:
Guice.createInjector(new ProdDbModule(), new ProdPubSubModule(), new ProdModule())?