質問

これが私のジンモジュールです:

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コンパイルを試みると、次のエラーが発生します。

エラー]クラスcom.google.gwt.activity.shared.activitymanagerの@injectまたはデフォルトのコンストラクターはありません。

私は指定していますか @Provides 方法が間違っていますか?

役に立ちましたか?

解決

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

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

あなたが生成/配線を生成している実際のものを見ると、私はそれが実際に役立つと思います @Inject ActivityManager の親にインスタンス SimplePanel (またはあなたがディスプレイとして使用しているものは何でも)、そして電話 setDisplay 代わりに。少なくとも私にとっては、モジュールの一部ではなくコードのブロックの一部であるため、ディスプレイを交換したり変更しやすくなります。また、熱心なシングルトンを作成する必要性も削除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top