2

GWT プロジェクト セット (「メイン プロジェクト」、「ウィジェット プロジェクト」、「サービス アダプタ プロジェクト」) に循環依存の問題があります。主な参照ウィジェットとサービス アダプター。ウィジェットはサービス アダプタを参照します。そして、ここで問題が発生します。EventBus私は事実上どこにでも注射を使いたいと思っています。Ginjector インターフェイスはどこに配置すればよいですか?

さまざまなプロジェクトからクラスを注入できるように、すべてのプロジェクトから使用でき、すべてのプロジェクトからクラスを参照する必要があります。これは明らかにコンパイルできません。

ウィジェット用に別の Ginjector を使用し、EventBus. 2 つの別個の Ginjector が 2 つの別個GinModulesの両方を含む@Singleton EventBusバインディングを使用する場合、2 つのゲッターは同じEventBusインスタンスを返しますか?

注: これは Gin であり、Guice の質問ではありません。

4

2 に答える 2

3

私が考えることができる最も簡単な方法はEventBus、別のインジェクターでシングルトンとして作成する (または一部のクラスで静的な最終フィールドにする) ことです。次に、他のインジェクターで使用して、その特定のインスタンス@Providesにアクセスします。EventBus

于 2012-01-25T17:08:02.360 に答える
1

論理セクションごとに 1 つのモジュール (多くの場合、プロジェクトごとに 1 つ以上) を作成し、次にエントリポイントから使用できる単一の ginjector を作成し、必要なすべてのモジュールを参照します。エントリポイントを (ほぼ) 通過したものはすべて Gin によって作成されるため、フィールドを注入することができます。

作成される新しい Ginjector にはそれぞれGWT.create独自のシングルトン セットがあるため、単一のルート ジンジェクターのみを作成することが重要です。そのインジェクターをコードベースの他の部分に注入することは可能ですが、そうしないと、通常はより読みやすいコードになります。

EventBusGin によって作成されていないオブジェクトにインスタンスまたはその他のものを渡す必要がある場合は、いくつかのオプションがあります。1 つ目は、独自の Provider インスタンスを作成し、それをモジュールにバインドする (または、モジュールに の注釈が付けられたメソッドを作成する@Provides) ことです。2 つ目は、単一のパラメーターを取り、void を返すメソッドを ginjector に作成することです。Gin は、その宣言された型のすべてのフィールドとセッターを注入できます。@Inject以下の例では、 inで注釈が付けられたフィールドとセッター、MyWidgetおよびそのスーパークラスのみが注入されます。サブクラスも検索することはわかりません。

void injectMyWidget(MyWidget widget);
于 2012-01-25T22:00:10.513 に答える