Gin ne pas trouver la méthode @Provides
-
27-10-2019 - |
Question
Voici mon module 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;
}
}
Lorsque je tente de GWT décompiler, je reçois l'erreur suivante:
[ERREUR] Non @Inject ou constructeur par défaut trouvé pour la classe com.google.gwt.activity.shared.ActivityManager
Suis-je préciser la méthode @Provides
mal?
La solution
Vous n'avez pas besoin de la liaison explicite, et en fait, je pense qu'il va remplacer la méthode de @Provides
. Je ne sais pas d'une belle façon d'utiliser asEagerSingleton()
avec une méthode @Provides
, au lieu envisager une mise en œuvre de Provider<T>
.
bind(ActivityManager.class)
.toProvider(MyActivityManagerProvider.class)
.asEagerSingleton();
En regardant les choses réelles que vous générez / câblage, je trouve utile de @Inject
en fait l'instance ActivityManager
au parent du SimplePanel
(ou tout ce que vous utilisez comme l'affichage), et appelant setDisplay
il à la place. Au moins pour moi, ce qui rend plus facile de remplacer l'écran ou changer, car il fait partie de ce bloc de code au lieu d'une partie du module. Il supprime également la nécessité de créer un singleton avide.