Domanda

Ecco il mio modulo 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;
  }

}

Quando provo a GWT-Concile, ricevo il seguente errore:

ERRORE] Nessun costruttore @Inject o predefinito trovato per la classe com.google.gwt.activity.shared.activityManager

Sto specificando il @Provides Metodo sbagliato?

È stato utile?

Soluzione

Non hai bisogno del vincolo esplicito, e in effetti penso che sovrascriverà il @Provides metodo. Non conosco un bel modo di usare asEagerSingleton() con un @Provides metodo, considera invece un file Provider<T> implementazione.

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

Guardando le cose reali che stai generando/cablaggio, lo trovo utile in realtà @Inject il ActivityManager istanza al genitore del SimplePanel (o qualunque cosa tu stia usando come display) e chiamando setDisplay lì invece. Almeno per me, questo rende più facile sostituire il display o cambiarlo, poiché fa parte di quel blocco di codice anziché parte del modulo. Rimuove anche la necessità di creare un singleton desideroso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top