Gin no encontrar @provides método
-
27-10-2019 - |
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?
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.