MapBinder - Guice 4.0 beta4需要显式绑定

时间:2014-06-26 15:22:40

标签: 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);
    binder().requireExplicitBindings();

    bindCommonServices();

    install(new V8Module(exportDataMapBinder));

我在私有模块中填充地图,如下所示:

    exportDataMapBinder.addBinding(VERSION).to(ExportDataV8.class);

ExportData是一个接口,ExportDataV8实现了它(我不会粘贴它们以保持简短的问题)。

使用guice 4.0-beta工作得很好,但是使用guice 4.0-beta4,我开始遇到这样的错误:

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)

任何人都知道我做错了什么?

如果我忘记提供重要细节,请告诉我。

2 个答案:

答案 0 :(得分:0)

我从您的示例中看到您正在设置主模块需要明确的绑定。只需删除该方法,它肯定会起作用。如果该代码之前有效,请不要知道4.0-beta中的更改。

您的代码:

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

应该删除这一行:

binder().requireExplicitBindings();

答案 1 :(得分:0)

我更新到Guice 4.0 beta 5并解决了我的问题。正如塔维安巴恩斯所说。这可能是beta 4的一个错误。