Pregunta

Aquí está mi módulo de ginebra:

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

}

Cuando intento compilar GWT, recibo el siguiente error:

Error] No @Inject o constructor predeterminado encontrado para la clase com.google.gwt.activity.shared.activityManager

¿Estoy especificando el @Provides método incorrecto?

¿Fue útil?

Solución

No necesitas la vinculación explícita, y de hecho creo que anulará el @Provides método. No sé de una buena manera de usar asEagerSingleton() con un @Provides método, en cambio, considere un Provider<T> implementación.

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

Mirando las cosas reales que está generando/cableado, me parece útil realmente @Inject la ActivityManager instancia al padre del SimplePanel (o lo que sea que esté utilizando como pantalla) y llamando setDisplay en su lugar. Al menos para mí, esto hace que sea más fácil reemplazar la pantalla o cambiarla, ya que es parte de ese bloque de código en lugar de parte del módulo. También elimina la necesidad de crear un singleton ansioso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top