Frage

Hier ist mein Gin -Modul:

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;
  }

}

Wenn ich versuche, GWT-compile zu machen, erhalte ich den folgenden Fehler:

Fehler] Kein @inject oder Standardkonstruktor für die Klasse com.google.gwt.Activity.shared.ActivityManager

Gibt ich das an @Provides Methode falsch?

War es hilfreich?

Lösung

Sie brauchen nicht die explizite Bindung, und tatsächlich denke ich, dass es das überschreien wird @Provides Methode. Ich weiß nicht eine schöne Art zu benutzen asEagerSingleton() mit einer @Provides Methode, stattdessen a Provider<T> Implementierung.

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

Wenn ich mir die tatsächlichen Dinge ansehe, die du generierst/verkabelt, finde ich es nützlich, um es tatsächlich zu @Inject das ActivityManager Instanz an den Elternteil der SimplePanel (oder was auch immer Sie als Display verwenden) und aufrufen setDisplay dort stattdessen. Zumindest für mich erleichtert es mir, das Display zu ersetzen oder zu ändern, da es Teil dieses Codeblocks anstelle eines Teils des Moduls ist. Es entfernt auch die Notwendigkeit, einen eifrigen Singleton zu schaffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top