将类映射绑定到guice模块

时间:2015-05-29 21:57:26

标签: java dependency-injection guice code-injection

我目前正在尝试将包含Map<? extends CustomModule, CustomModule>(来自其他自定义模块系统)的地图条目添加为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
    }
});

Guice遗憾地需要直接类而不是通配符(“?extends”)。 由于我已经获得了“绑定”,是否有另一种方法将它们添加到注射器中?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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

我还必须在我的情况下添加一个空检查,但它还包括如何将你的未知类转换为guice的“Key”帮助器。