Java MapBinder需要显式绑定-Guice 4.0 beta4

Java MapBinder需要显式绑定-Guice 4.0 beta4,java,dependency-injection,guice,Java,Dependency Injection,Guice,今天早上,我尝试将Guice版本从4.0-beta升级到4.0-beta4,但MapBinder出现了问题。我有一个扩展JerseyServletModule的基本模块。在configureServlets()方法中,我执行以下操作: MapBinder<String, ExportData> exportDataMapBinder = MapBinder.newMapBinder(binder(),String.class,ExportData.class); bi

今天早上,我尝试将Guice版本从4.0-beta升级到4.0-beta4,但MapBinder出现了问题。我有一个扩展JerseyServletModule的基本模块。在configureServlets()方法中,我执行以下操作:

    MapBinder<String, ExportData> exportDataMapBinder = MapBinder.newMapBinder(binder(),String.class,ExportData.class);
    binder().requireExplicitBindings();

    bindCommonServices();

    install(new V8Module(exportDataMapBinder));
ExportData是一个接口,ExportDataV8实现了它(为了简短起见,我不会粘贴它们)

使用guice 4.0-beta它工作得很好,但是使用guice 4.0-beta4,我开始出现如下错误:

    exportDataMapBinder.addBinding(VERSION).to(ExportDataV8.class);
1) Explicit bindings are required and com.coveo.ua.data.export.ExportData annotated with @com.google.inject.multibindings.Element(setName=, uniqueId=2, type=MAPBINDER) is not explicitly bound.
  while locating com.coveo.ua.data.export.ExportData annotated with @com.google.inject.multibindings.Element(setName=, uniqueId=2, type=MAPBINDER)
  at com.google.inject.multibindings.MapBinder$RealMapBinder$1.initialize(MapBinder.java:380)
  at com.coveo.ua.config.UsageAnalyticsBaseModule.configureServlets(UsageAnalyticsBaseModule.java:223)
有人知道我做错了什么吗


如果我忘记包含重要的细节,请告诉我。

我从您的示例中看到,您正在设置主模块需要显式绑定。只要删除该方法,它肯定会工作。不知道在4.0-beta版中,如果该代码以前运行过,会发生什么变化

您的代码:

MapBinder<String, ExportData> exportDataMapBinder = ...
binder().requireExplicitBindings();

我更新到,它解决了我的问题。正如塔维亚·巴恩斯所建议的那样。这可能是beta 4的一个bug。

这看起来像个bug,如果您可以制作一个简化的测试用例,那么请在上报告它。我将制作一个测试用例,并按照您的建议进行报告。如果这真的是一个bug,我希望它在beta4中。否则,我的代码就永远不会工作了……您也可以尝试最新的git,它可能已经被修复了。遗憾的是,删除binder.requireExplicitBindings()不是一个选项。我们用它把“魔力”减到最小。
binder().requireExplicitBindings();