Question

Voici mon module Gin:

public class FooGinModule extends AbstractGinModule {

  @Override
  protected void configure() {
    ...

    bind(ActivityManager.class).asEagerSingleton();

    ...
  }

  @Provides
  @Singleton
  public ActivityManager getActivityManager(EventBus eventBus, SimplePanel display,
      ActivityMapper activityMapper) {
    final ActivityManager activityManager = new ActivityManager(activityMapper, eventBus);
    activityManager.setDisplay(display);
    return activityManager;
  }

}

Lorsque je tente de GWT décompiler, je reçois l'erreur suivante:

[ERREUR] Non @Inject ou constructeur par défaut trouvé pour la classe com.google.gwt.activity.shared.ActivityManager

Suis-je préciser la méthode @Provides mal?

Était-ce utile?

La solution

Vous n'avez pas besoin de la liaison explicite, et en fait, je pense qu'il va remplacer la méthode de @Provides. Je ne sais pas d'une belle façon d'utiliser asEagerSingleton() avec une méthode @Provides, au lieu envisager une mise en œuvre de Provider<T>.

bind(ActivityManager.class)
    .toProvider(MyActivityManagerProvider.class)
    .asEagerSingleton();

En regardant les choses réelles que vous générez / câblage, je trouve utile de @Inject en fait l'instance ActivityManager au parent du SimplePanel (ou tout ce que vous utilisez comme l'affichage), et appelant setDisplay il à la place. Au moins pour moi, ce qui rend plus facile de remplacer l'écran ou changer, car il fait partie de ce bloc de code au lieu d'une partie du module. Il supprime également la nécessité de créer un singleton avide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top