Gin findet nicht @Provides -Methode
-
27-10-2019 - |
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?
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.