假设我有两个模块ModuleA
和ModuleB
,它们是自给自足的,可以用作独立模块。这两个模块都依赖于第三个模块ModuleC
,如
install(new ModuleC());
现在,我有一个用例,我需要创建一个包含A和B模块的注入器。我这样做了:
Guice.createInjector(new ModuleA(), new ModuleB());
它按预期抛出CreationException
,表示已在其中一个模块上配置了对某个类的绑定。请记住,我没有权力改变ModuleA
和ModuleB
,我该如何让它发挥作用?
我尝试使用Modules.combine(Modules... modules)
,但这并没有解决我的问题。那有什么解决方案吗?
答案 0 :(得分:4)
考虑您定义了以下绑定:
<强> ModuleC 强>:
<强> ModuleA 强>
<强> ModuleB 强>
现在当你Guice.createInjector(new ModuleA(),new ModuleB())
或Modules.combine(..)
时,
你的最终绑定列表将是:
因为C1绑定被列出两次,会产生冲突并导致CreationException。
但是如果你使用Modules.override()代替:
返回一个构建器,该构建器创建一个覆盖给定模块上覆盖模块的模块。如果在两组模块中绑定了一个键,则只保留覆盖模块的绑定
E.g。通过做
Modules.override(new ModuleA()).with(new ModuleB()
您的最终绑定列表如下: