编写这些Guice Multibind语句的更好方法是什么?

时间:2013-07-10 23:25:26

标签: java dependency-injection guice

我有一些看似如下的多绑定代码:

bind(SuperClass.class).annotatedWith(Names.named("Name1"))
                .to(SubClass1.class).in(Scopes.SINGLETON);
bind(SuperClass.class).annotatedWith(Names.named("Name2"))
                .to(SubClass2.class).in(Scopes.SINGLETON);
...another 20 lines of this stuff

我也有一些看起来像这样的代码:

multiBinder.addBinding().to(SomeClass1.class)
                .in(Scopes.SINGLETON);
multiBinder.addBinding().to(SomeClass2.class)
                .in(Scopes.SINGLETON);
...another 20 lines of this stuff too

Guice有没有办法用更少的行/更少的重复次数来做这件事?

编辑:不寻找像“使用for循环并迭代一组键”这样的答案。

1 个答案:

答案 0 :(得分:3)

您可以稍微扩展DSL。

mySpecialBinding("Name1", SubClass1.class);
mySpecialBinding("Name2", SubClass2.class);

// ...

void mySpecialBinding(String name, Class<? extends SuperClass> clazz) {
    bind(SuperClass.class).annotatedWith(Names.named(name))
                .to(clazz).in(Scopes.SINGLETON);
    multiBinder.addBinding().to(clazz)
                .in(Scopes.SINGLETON);
}