Gin non trova il metodo @Provide
-
27-10-2019 - |
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?
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.