Джин не находит метод @provides
-
27-10-2019 - |
Вопрос
Вот мой модуль джина:
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;
}
}
Когда я пытаюсь выпустить gwt-compile, я получаю следующую ошибку:
Ошибка] Нет @Inject или конструктор по умолчанию, найденный для класса com.google.gwt.activity.shared.activitymanager
Я указываю @Provides
Метод неправильный?
Решение
Вам не нужно явное обязательство, и на самом деле я думаю, что это переопределит @Provides
метод Я не знаю хорошего способа использовать asEagerSingleton()
с @Provides
метод вместо этого рассмотрим Provider<T>
реализация.
bind(ActivityManager.class)
.toProvider(MyActivityManagerProvider.class)
.asEagerSingleton();
Глядя на фактические вещи, которые вы генерируете/проводят, я нахожу это полезным для @Inject
а ActivityManager
экземпляр для родителей SimplePanel
(или все, что вы используете в качестве дисплея), и вызов setDisplay
там вместо этого. По крайней мере, для меня это облегчает замену дисплея или изменение его, так как он является частью этого блока кода вместо части модуля. Это также устраняет необходимость создания нетерпеливого синглтона.