Джин не находит метод @Provides - PullRequest
2 голосов
/ 20 февраля 2012

Вот мой модуль 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;
  }

}

Когда я пытаюсь gwt-compile, я получаю следующую ошибку:

[ОШИБКА] Нет @Inject или конструктор по умолчаниюнайдено для класса com.google.gwt.activity.shared.ActivityManager

Неправильно ли я указываю метод @Provides?

1 Ответ

3 голосов
/ 20 февраля 2012

Вам не нужна явная привязка, и на самом деле я думаю, что она переопределит метод @Provides.Я не знаю хорошего способа использования asEagerSingleton() с методом @Provides, вместо этого рассмотрим реализацию Provider<T>.

bind(ActivityManager.class)
    .toProvider(MyActivityManagerProvider.class)
    .asEagerSingleton();

Глядя на фактические вещи, которые вы генерируете / проводите, янайти полезным на самом деле @Inject экземпляр ActivityManager для родителя SimplePanel (или того, что вы используете в качестве дисплея), и вместо этого вызывать setDisplay.По крайней мере, для меня это облегчает замену дисплея или его изменение, поскольку он является частью этого блока кода, а не частью модуля.Это также избавляет от необходимости создавать энергичный синглтон.

...