我今天早上尝试将我的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)
任何人都知道我做错了什么?
如果我忘记提供重要细节,请告诉我。
答案 0 :(得分:0)
我从您的示例中看到您正在设置主模块需要明确的绑定。只需删除该方法,它肯定会起作用。如果该代码之前有效,请不要知道4.0-beta中的更改。
您的代码:
MapBinder<String, ExportData> exportDataMapBinder = ...
binder().requireExplicitBindings();
应该删除这一行:
binder().requireExplicitBindings();
答案 1 :(得分:0)
我更新到Guice 4.0 beta 5并解决了我的问题。正如塔维安巴恩斯所说。这可能是beta 4的一个错误。