杜松子酒找不到@Provides方法

时间:2012-02-19 21:24:14

标签: gwt dependency-injection gin

这是我的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 个答案:

答案 0 :(得分:3)

您不需要显式绑定,实际上我认为它会覆盖@Provides方法。我不知道使用asEagerSingleton()方法使用@Provides的好方法,而是考虑Provider<T>实现。

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

查看您正在生成/接线的实际内容,我发现实际@Inject ActivityManager实例对SimplePanel的父级(或者您正在使用的任何内容)很有用显示),并在那里调用setDisplay。至少对我而言,这使得更换显示器或更改显示更容易,因为它是代码块的一部分而不是模块的一部分。它还消除了创建热切单身人士的需要。