2

Ginを使用してGWTAsyncRPCサービスを注入することについて質問があります。

同じ非同期サービスを使用する2つのクラスがあります。

class TheViewA {    
    @Inject
    public TheViewA(MyServiceAsync myServiceASync) {
        ....
    }
}


class TheViewB {
    @Inject
    public TheViewB(MyServiceASync myServiceASync) {
        ....
    }
}

これは正常に機能します。ただし、これによりGWTが内部的に呼び出すことがわかりました。

GWT.create(MyServiceASync.class) 

注射ごとに2回。これの欠点はわかりませんが、両方とも1つのMyServiceAsyncインスタンスを共有できると思います。

誰かがGin(Guice)を構成して、両方のインジェクションに対してMyServiceAsyncのインスタンスが1つだけ作成されるようにする方法を教えてもらえますか?

または、インジェクションとその理由の両方に別々のインスタンスを作成しても大丈夫ですか?

どうもありがとう。

4

1 に答える 1

1

インジェクションに関しては、特定のタイプのバインドが見つからない場合、インスタンスを作成するためGinに自動的にフォールバックします。これが、//などが単に機能するGWT.create()理由であり、独自の拡張子にバインドする必要はありません。ClientBundleGWT-RPCi18nAbstractGinModule

もちろんGin、同じタイプの別のインジェクションを見つけると、別のインスタンスをインジェクトします。シングルトンインスタンスを作成して注入するには、GWT-RPC非同期サービスインターフェイスを@Singletonスコープにバインドするだけです。このような:

public class YourModule extends AbstractGinModule {
  @Override
  protected void configure() {
    bind(MyServiceAsync.class).in(Singleton.class);
  }
}

またはProvider<MyServiceAsync>、常にシングルトンインスタンスを返すを作成することもできますが、前のアプローチははるかに簡単です。

通常、アプリケーション全体に注入されるシングルトン非同期インスタンスが推奨されます。

于 2013-03-16T17:05:25.710 に答える