roc*_*god 4 java dependency-injection guice
假设我有两个模块ModuleA,ModuleB它们是自给自足的,可以用作独立模块。这两个模块都依赖于第三个模块,ModuleC例如
install(new ModuleC());
Run Code Online (Sandbox Code Playgroud)
现在,我有一个用例,我需要使用两个模块 A 和 B 创建一个注入器。 我这样做了:
Guice.createInjector(new ModuleA(), new ModuleB());
Run Code Online (Sandbox Code Playgroud)
它CreationException按预期抛出了一个,表示已经在其中一个模块中配置了对某个类的绑定。请记住,我没有改变的动力ModuleA和ModuleB,我怎么做工作?
我尝试使用,Modules.combine(Modules... modules)但这并没有解决我的问题。有什么解决方案吗?
zep*_*lin 10
考虑您定义了以下绑定:
模块C:
模块A
模块B
现在,当您执行Guice.createInjector(new ModuleA(),new ModuleB())or 时Modules.combine(..),您的最终绑定列表将是:
由于 C1 绑定被列出两次,这会产生冲突并导致CreationException.
但是如果你使用Modules.override()代替:
返回一个构建器,该构建器创建一个模块,该模块将覆盖模块覆盖在给定模块上。如果在两组模块中都绑定了一个键,则仅保留来自覆盖模块的绑定。
例如通过做
Modules.override(new ModuleA()).with(new ModuleB())
Run Code Online (Sandbox Code Playgroud)
您的最终绑定列表如下:
从ModuleA继承的 C1 绑定将被删除,以支持ModuleB 中定义的 C1 绑定,从而解决冲突。
| 归档时间: |
|
| 查看次数: |
3264 次 |
| 最近记录: |