我试图将儿童注射器的Guice功能与Multibinders结合起来。例如:
public class Test {
public static void main(String[] args) {
Guice.createInjector(new FirstModule(), new SecondModule()); // works perfectly, returns set with 2 elements
Guice.createInjector(new FirstModule()).createChildInjector(new SecondModule()); // fails: A binding to java.util.Set<Test$MyInterface> was already configured at Test$FirstModule.configure(Test.java:15).
}
private static class FirstModule extends AbstractModule {
@Override
protected void configure() {
Multibinder.newSetBinder(binder(), MyInterface.class).addBinding().to(FirstImplementation.class);
}
}
private static class SecondModule extends AbstractModule {
@Override
protected void configure() {
Multibinder.newSetBinder(binder(), MyInterface.class).addBinding().to(SecondImplementation.class);
}
}
private static interface MyInterface {}
private static class FirstImplementation implements MyInterface {}
private static class SecondImplementation implements MyInterface {}
}
是否有可能让儿童注射器以某种方式添加到多重绑定?
答案 0 :(得分:0)
从我发现的情况来看,这不是也不可能。如果在第一个喷射器中请求了一组物体,则必须使用第一个喷射器的结合物进行注射。如果你然后创建一个子注入器并绑定一个额外的值,你实际上会覆盖父注入器的set绑定,而Guice不允许这样做。