스택 오버플로가 발생하지만 문제를 해결했다고 생각합니다. 문제는 내 패널 위젯을 바인딩 할 때 재귀 적 주입입니다. 내가 만난 문제는 내 PanelWidget이 Map을 매개 변수로 사용한다는 것입니다. 문제는 이것이 무한 루프를 생성한다는 것입니다. 내가 Map<String, IDashboardWidget>
을 제거하면GinMapProvider 스택 오버플로
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);
문제는 물론 멀리 간다.
@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());
}
PanelWidget 클래스는 또한이 시도하고 WidgetFactory 클래스를 주입하지만,이 역시 내 문제가 해결되지 않았다. 싱글 톤을 만들면 바인딩을 다시 만들지 못할 것입니다.
@Inject
@Provides
@Singleton
WidgetFactory widgetFactory(Map<String, IDashboardWidget> widgetProvider) {
return new WidgetFactory(widgetProvider);
}
BTW 저는 이것을 GWTTestCase에서 실행하고 있는데, 이것이 차이가 있다고 생각하지 않습니다.
지도 값 중 하나가 'PanelWidget'에 따라 달라질 수 있습니까? 여러분이'Map>' –
THOMAS !!를 주입해야하는 것처럼 보입니다. 너 락이야. @Inject 생성자 매개 변수를 Provider으로 변경하면 문제가 해결됩니다. 대답을 추가하고 악을 보내십시오. –
완료, 답변으로 게시 됨. –