Java 使用具有相似依赖关系的两个不同模块创建guice注入器
假设我有两个模块Java 使用具有相似依赖关系的两个不同模块创建guice注入器,java,dependency-injection,guice,Java,Dependency Injection,Guice,假设我有两个模块ModuleA和ModuleB,它们是自给自足的,可以用作独立模块。这两个模块都依赖于第三个模块ModuleClike install(new ModuleC()); 现在,我有一个用例,需要创建一个同时包含模块a和模块B的喷油器。我这样做了: Guice.createInjector(new ModuleA(), new ModuleB()); 它按预期抛出了一个CreationException,表示在其中一个模块上已经配置了与某个类的绑定。请记住,我无权更改Module
ModuleA
和ModuleB
,它们是自给自足的,可以用作独立模块。这两个模块都依赖于第三个模块ModuleC
like
install(new ModuleC());
现在,我有一个用例,需要创建一个同时包含模块a和模块B的喷油器。我这样做了:
Guice.createInjector(new ModuleA(), new ModuleB());
它按预期抛出了一个CreationException
,表示在其中一个模块上已经配置了与某个类的绑定。请记住,我无权更改ModuleA
和ModuleB
,如何使其工作
我尝试使用
模块。组合(模块…模块)
但这并没有解决我的问题。有什么解决方案吗?请考虑定义了以下绑定:
模块化:
- C1
- A1
- A2
- B1
- B2
Guice.createInjector(新模块a(),新模块b())
或Modules.combine(…)
,时,
您的最终绑定列表将是:
- A1
- A2
- B1
- B2
- C1(从A继承而来)
- C1(!)(从B继承)
CreationException
但如果您使用:
返回一个生成器,该生成器创建一个模块,该模块将覆盖指定模块上的模块。如果在两组模块中都绑定了密钥,则只保留来自覆盖模块的绑定
例如通过做某事
Modules.override(new ModuleA()).with(new ModuleB())
您的最终绑定列表如下所示:
- A1
- A2
- B1
- B2
- C1(从A继承而来)
- C1(继承自B)
继承自模块a的C1绑定将被删除,以支持模块b中定义的C1绑定,从而解决冲突。我尝试了
Guice.createInjector(Modules.override(new ModuleA(),new ModuleB())。with(new ModuleC())代码>这起作用了Guice.createInjector(Modules.override(new ModuleA())。with(new ModuleB())
。谢谢。但是你能详细说明一下你的答案吗?