迭代Guice multibinder列表

时间:2018-02-09 07:14:14

标签: java guice

您好我正在尝试在模块中构建如下列表,我可以稍后将其注入任何类并在同一模块中使用如下:

public class MyConfigModule extends AbstractModule{

@Override
protected void configure() {
    Multibinder<String> myList =
            Multibinder.newSetBinder(binder(), String.class, Names.named("MyList"));

    myList.addBinding().toInstance("Test1");

    MapBinder<String, IManager> myMap = MapBinder
            .newMapBinder(binder(), String.class, IManager.class, 
                          Names.named("ManagerMap"));

    for(each item in the above myList) <--- cannot figure out how to do this i.e. iterating over a multibinder

         myMap
            .addBinding(item).to(MyManager.class).asEagerSingleton();

   }
}

1 个答案:

答案 0 :(得分:1)

简短而令人失望的答案是:你做不到。如果查看Multibinder的源代码,您会看到它只是将调用委托给RealMultibinder的实例。遗憾的是,RealMultibinder未公开任何允许您访问RealMultibinder内部数据的方法。即使它会这样做也没有用,因为{{1}}使用Binder的实现来管理绑定。我可以继续,但我认为你明白我的观点;)

所以唯一的选择(我真的不建议这样做)就是通过所有这些类来反映自己,直到你找到了绑定绑定的数据结构。