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 インジェクションをトリガーする方法でこれらのハンドラーをインスタンス化する必要があります (たとえば、依存関係を手動でインジェクトすることはできません)。
手がかりを事前にありがとう。私は完全に立ち往生しています...