Dépassement de pile de GinMapProvider

Je reçois un débordement de pile mais je pense avoir résolu le problème. Le problème est une injection récursive lors de la liaison de mon widget de panneau. Le problème que j'ai rencontré est que mon PanelWidget prend la carte en tant que paramètre. Le problème est alors que cela crée une boucle infinie.

GinMapProvider

    GinMapBinder 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);

If I remove Map the problem goes away of course.

Classe PanelWidget

@Inject
public PanelWidget(final EventBus eventBus, final Resources resources, Map widgetProvider) {
    super(eventBus, resources);
    this.widgetProvider = widgetProvider;
    initWidget(GWT. create(Binder.class).createAndBindUi(this));
    widgetsPanel.getElement().getStyle().setPosition(Position.RELATIVE);

    this.addDomHandler(widgetSelectedHandler, ClickEvent.getType());
}

J'ai essayé cela aussi et j'ai injecté la classe WidgetFactory mais cela n'a pas non plus résolu mon problème. J'avais espéré créer un singleton l'empêcherait de recréer les reliures.

@Inject
@Provides
@Singleton
WidgetFactory widgetFactory(Map widgetProvider) {
    return new WidgetFactory(widgetProvider);
}

BTW Je cours ceci dans un GWTTestCase mais je ne pense pas que cela fasse une différence.

0
THOMAS !! tu gères. La modification du paramètre constructeur @Inject sur Provider a résolu le problème. Ajouter une réponse et Ill envoyer les points.
ajouté l'auteur Chris Hinshaw, source
L'une des valeurs de votre carte dépend-elle de PanelWidget ? Il me semble que vous devriez plutôt injecter un Map >
ajouté l'auteur Thomas Broyer, source
Fait, posté comme réponse.
ajouté l'auteur Thomas Broyer, source

1 Réponses

Vous avez probablement des dépendances circulaires, en particulier entre l'une des choses que vous mettez dans la carte et le PanelWidget .

Given the look of your code (WidgetFactory), I think you might actually need a Map> instead of a Map. And that would cut the circular dependency as a side effect.

1
ajouté