2015-05-29 63 views
1

我目前正在尝试添加由Map<? extends CustomModule, CustomModule>(来自附加的自定义模块系统)组成的映射的条目作为guice模块中的绑定。将类的映射绑定到guice模块内的实例

到目前为止我的代码看起来是这样的:

manager.getRegistry().forEach(new BiConsumer<Class<? extends CustomModule>, ModuleRegistry.Entry>() { 
    @Override 
    public void accept(Class<? extends CustomModule> moduleClass, ModuleRegistry.Entry entry) { 
     bind(moduleClass).to(entry.getModule()); // getModule() returns the instance which implements moduleClass 
    } 
}); 

吉斯黯然需要直接类,而不是一个通配符(“扩展?”)。 由于我已经得到了“绑定”,是否有另一种方法将它们添加到注入器?

在此先感谢!

回答

0

所以在尝试了其他各种可能的方法后,我终于找到了一个可行的方法。 由于最初的问题是,Guice需要“捕获”某些东西(在这种情况下,“捕获?扩展模块实例”,基本上意味着某个东西是模块的一个实例)并且失败了,所以我不得不施放我的已知模块类的原始类型,比如:

final Class moduleClass = (Class) aClass; 
final Binding binding = injector.getExistingBinding(Key.get(moduleClass)); 
if (binding == null) { 
    bind(moduleClass).toInstance(entry.getModule()); 
} 

我也只好在我的情况下添加一个空检查,但它也包括怎样的方式来投你未知的类吉斯的“钥匙”的帮手。