我得到了堆栈溢出但我认为我已经解决了这个问题。绑定我的面板小部件时,问题是递归注入。我遇到的问题是我的PanelWidget将Map作为参数。问题是,这会产生无限循环。
GinMapProvider
GinMapBinder<String, IDashboardWidget> mapBinder = GinMapBinder
.newMapBinder(binder(), String.class, IDashboardWidget.class);
mapBinder.addBinding(IGaugeWidgetModel.class.getName()).to(MockGaugeWidget.class);
mapBinder.addBinding(IPlotWidgetModel.class.getName()).to(PlotWidget.class);
mapBinder.addBinding(ITableWidgetModel.class.getName()).to(TableWidget.class);
mapBinder.addBinding(IPanelWidgetModel.class.getName()).to(PanelWidget.class);
如果我删除Map<String, IDashboardWidget>
,问题就会消失。
PanelWidget类
@Inject
public PanelWidget(final EventBus eventBus, final Resources resources, Map<String, IDashboardWidget> widgetProvider) {
super(eventBus, resources);
this.widgetProvider = widgetProvider;
initWidget(GWT.<Binder> create(Binder.class).createAndBindUi(this));
widgetsPanel.getElement().getStyle().setPosition(Position.RELATIVE);
this.addDomHandler(widgetSelectedHandler, ClickEvent.getType());
}
我也尝试了这个并注入了WidgetFactory类,但这也没有解决我的问题。我曾希望创建一个单例会阻止它重新创建绑定。
@Inject
@Provides
@Singleton
WidgetFactory widgetFactory(Map<String, IDashboardWidget> widgetProvider) {
return new WidgetFactory(widgetProvider);
}
BTW我在GWTTestCase中运行它,但我不认为这会产生影响。
答案 0 :(得分:1)
您可能具有循环依赖关系,特别是您在地图中添加的内容之一与PanelWidget
之间。
考虑到代码的外观(WidgetFactory
),我认为您实际上可能需要Map<String, Provider<IDashboardWidget>>
而不是Map<String, IDashboardWidget>
。这会将循环依赖性视为副作用。