2

これが私の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を実行しようとすると、次のエラーが発生します。

[エラー]クラスcom.google.gwt.activity.shared.ActivityManagerの@Injectまたはデフォルトのコンストラクターが見つかりません

メソッドの指定が@Provides間違っていますか?

4

1 に答える 1

3

@Provides明示的なバインディングは必要ありません。実際、メソッドをオーバーライドすると思います。asEagerSingleton()メソッドで使用する良い方法がわかりません。@Provides代わりに、Provider<T>実装を検討してください。

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

あなたが生成/配線している実際のものを見ると、実際@InjectActivityManagerインスタンスをSimplePanel(またはディスプレイとして使用しているもの)の親に呼び出しsetDisplay、代わりにそこで呼び出すと便利だと思います。少なくとも私にとっては、これはディスプレイの交換や変更を容易にします。これは、モジュールの一部ではなく、コードのブロックの一部であるためです。また、熱心なシングルトンを作成する必要もなくなります。

于 2012-02-19T23:48:08.977 に答える