binding - 使用guice绑定(bind)不同的 map

标签 binding guice

我的文件中有一张 map ,例如:

workflowProperties1 = { "key1" : "value1"; "key2": "value2"; };

workflowProperties2 = { "key1" : "value1"; "key2": "value2"; };

我想使用 guice 将此映射注入(inject)到类的构造函数中。我正在做类似的事情:
@Inject public myClass(@Named("workflowProperties1") Map<String,String> someMap) { }

有人可以建议我如何根据静态参数值在上面的 myClass 中注入(inject)两个映射(workflowProperties1 或 workflowProperties2)之一吗?

最佳答案

一个解决方案可能是使用 Guice Multibindings .请注意,核心 Guice 中不包含多绑定(bind)器,因此您需要对 com.google.inject.extensions:guice-multibindings 的额外依赖。 .

然后你可以定义你的绑定(bind)模块,像这样(实际上你会从你的文件中提取键/值):

@Override
protected void configure()
{
    MapBinder<String, String> wf1Binder = MapBinder.newMapBinder(
                    binder(), 
                    String.class, 
                    String.class, Names.named("workflowProperties1"));

    wf1Binder.addBinding("WF1Key").toInstance("WF1Value");

    MapBinder<String, String> wf2Binder = MapBinder.newMapBinder(
                    binder(), 
                    String.class, 
                    String.class, Names.named("workflowProperties2"));

    wf2Binder.addBinding("WF2Key").toInstance("WF2Value");
}

然后,您可以按照您的要求轻松地“基于静态参数值”注入(inject)正确的 map ,例如:
private static final String STATIC_PARAMETER_VALUE = "workflowProperties1";

@Inject
@Named(STATIC_PARAMETER_VALUE) 
Map<String,String> someMap;

关于binding - 使用guice绑定(bind)不同的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41367443/

相关文章:

wpf - 如何将 TextBlock 绑定(bind)到包含格式化文本的资源?

java - 是否有与 @Assisted 等效的 javax.inject.*

java - 用于绑定(bind)在 guice 中实现接口(interface)的类的注释

java - 单元测试 gwt-dispatch

java - Guice 跨模块注入(inject)以实现共享

c# - 以编程方式在 Datagrid 模板 c# 中添加图像

c# - 在ListBox中绑定(bind)用户控件的DependencyProperty

WPF如何通过DynamicResource为FontSize属性设置pt(12pt等..)

java - java 中的替代 xml 绑定(bind)

hibernate - 如何使用 Guice 将属性注入(inject)/解析到 XML 文件中以配置 persistence.xml 文件?