在子进样器中添加到Multibinder

时间:2014-05-23 12:24:31

标签: java guice

我试图将儿童注射器的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 {}
}

是否有可能让儿童注射器以某种方式添加到多重绑定?

1 个答案:

答案 0 :(得分:0)

从我发现的情况来看,这不是也不可能。如果在第一个喷射器中请求了一组物体,则必须使用第一个喷射器的结合物进行注射。如果你然后创建一个子注入器并绑定一个额外的值,你实际上会覆盖父注入器的set绑定,而Guice不允许这样做。