2

com.google.gwt.core.ext.Generator(サブクラスを使用して) イベント ハンドラーのセットを動的に生成しようとしています。生成プロセス全体が正常に動作し、生成されたハンドラーはセッター インジェクション (@Inject アノテーション) を介して EventBus を受け入れます。全体的なアイデアは、これらの自動生成されたハンドラーがフードの下の (注入された) EventBus に自分自身を登録することです。問題は、これらすべてのハンドラーを何らかの方法でインスタンス化する必要があることです。GIN モジュールにバインドされるまで、GIN はそれらについて何も知りません。以下のようなもの:

bind(MyDynamicallyGeneratedHandler.class).asEagerSingleton();

このコードの問題は、gin モジュールも生成する必要があることです (これにはすべての bind(...) 命令が含まれます)。うまく動作しますが、生成されたモジュール (@Inject it) を生成されていない別のモジュールにインストールできないため、バインド命令が実行されます (install(MyDynamicModule.class) の結果として)。静的注入とプロバイダーを使用して汚いトリックを試しましたが、すべて成功しませんでした。

動的に生成された GIN モジュールを構成する方法はありますか? それとも、動的に生成されたハンドラーをインスタンス化して、セッター インジェクション (およびイベント バス登録) が発生するようにする方法はありますか?

サンプル コード スニペットは次のとおりです。

// it is standard interface
public interace DynamicHandler {
  @Inject
  void setEventBus(EventBus eventBus);
}

// one of dynamically generated handlers
// where (how) to instantiate me?
public class MyHandler implements DynamicHandler {

  @Inject
  AnotherHandlerSpecificComponent component    

  void setEventBus(EventBus eventBus) {
    eventBus.register(...); // register myself
  }
}

注意すべき重要なことは、これらの動的に生成されたすべてのハンドラーには、@Injected (EventBus とは別に) 他の依存関係があることです。そして、これらの依存関係 (それらのタイプ) はハンドラー固有のものです (AnotherHandlerSpecificComponent上記の例では)。したがって、GIN インジェクションをトリガーする方法でこれらのハンドラーをインスタンス化する必要があります (たとえば、依存関係を手動でインジェクトすることはできません)。

手がかりを事前にありがとう。私は完全に立ち往生しています...

4

1 に答える 1

0

ハンドラーの依存関係を注入し、実際のハンドラーをインスタンス化して登録しようとするファクトリはどうですか (たとえば、リフレクションまたはファイル システムのスキャンによって?)

于 2012-01-24T21:28:43.520 に答える