gpt4 book ai didi

java - 如何获取已安装的 MapBinder 以向其中添加其他绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 09:58:11 30 4
gpt4 key购买 nike

我使用com.google.inject:guice。在我的项目中,我包含了一个依赖项,该依赖项具有一个模块(扩展 com.google.inject.AbstractModule 的类),该模块定义了这样的 MapBinder

public class ParentGuiceModule extends AbstractModule {    
@Override
protected void configure() {
MapBinder.newMapBinder(binder(), TypeLiteral.get(String.class), TypeLiteral.get(SomeModuleClass.class));
...
}
}

在我的模块类中,我想获取 MapBinder 并向其添加新的绑定(bind)。我的意思是我想写这样的东西:

public class MyGuiceModule extends AbstractModule {    
@Override
protected void configure() {
MapBinder<String, SomeModuleClass> parentModules = MapBinder.get(binder(), TypeLiteral.get(String.class), TypeLiteral.get(SomeModuleClass.class));
parentModules.addBinding("MyId").to(MyClass.class);
}
}

我怎样才能做到这一点?我无法更改父模块。

我查看了MapBinder类,似乎它没有任何方法来安装已安装的MapBinder

最佳答案

这正是 MapBinder 的设计目的 - 毕竟,如果您知道单个模块中 MapBinder 中的所有内容,您可以只写 @Provides Map<Foo, Bar>bind(new TypeLiteral<Map<Foo, Bar>>(){})并完成它。

来自MapBinder top-level docs :

Contributing mapbindings from different modules is supported. For example, it is okay to have both CandyModule and ChipsModule both create their own MapBinder<String, Snack>, and to each contribute bindings to the snacks map. When that map is injected, it will contain entries from both modules.

不要因为名字newMapBinder而气馁。 :只要你的参数与 newMapBinder 完全相同并且将两个模块安装在同一个注入(inject)器中,您将得到一个包含两个模块的绑定(bind)的映射。

关于java - 如何获取已安装的 MapBinder 以向其中添加其他绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55833845/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com