将 类 的映射绑定到 guice 模块内的实例
Binding a map of classes to instances inside guice module
我目前正在尝试添加由 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 遗憾地需要直接 class 而不是通配符(“?extends”)。
既然我已经得到了 "bindings",还有其他方法可以将它们添加到注射器吗?
提前致谢!
所以在尝试了各种其他可能的方法之后,我终于找到了一个可行的方法。
由于最初的问题是 Guice 需要一个 "capture" 的东西(在这种情况下 "capture of ? extends Module instance",基本上意味着某个东西是某个模块的实例)并且失败了,我不得不转换我已经知道的东西模块 class 到它的原始类型,像这样:
final Class moduleClass = (Class) aClass;
final Binding binding = injector.getExistingBinding(Key.get(moduleClass));
if (binding == null) {
bind(moduleClass).toInstance(entry.getModule());
}
我还必须在我的案例中添加空检查,但它还包括如何将你的未知 class 转换为 guice 的 "Key" 助手。
我目前正在尝试添加由 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 遗憾地需要直接 class 而不是通配符(“?extends”)。 既然我已经得到了 "bindings",还有其他方法可以将它们添加到注射器吗?
提前致谢!
所以在尝试了各种其他可能的方法之后,我终于找到了一个可行的方法。 由于最初的问题是 Guice 需要一个 "capture" 的东西(在这种情况下 "capture of ? extends Module instance",基本上意味着某个东西是某个模块的实例)并且失败了,我不得不转换我已经知道的东西模块 class 到它的原始类型,像这样:
final Class moduleClass = (Class) aClass;
final Binding binding = injector.getExistingBinding(Key.get(moduleClass));
if (binding == null) {
bind(moduleClass).toInstance(entry.getModule());
}
我还必须在我的案例中添加空检查,但它还包括如何将你的未知 class 转换为 guice 的 "Key" 助手。