Вопрос

Вот мой модуль джина:

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 там вместо этого. По крайней мере, для меня это облегчает замену дисплея или изменение его, так как он является частью этого блока кода вместо части модуля. Это также устраняет необходимость создания нетерпеливого синглтона.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top