2

奇妙なタスクを解決する必要があります:Guiceによって作成されたクラスAがあります:

bind(A.class)

しかし後で、ActorをクラスA(本質的にActor)で初期化する必要があります。

actorSystem.actorOf(
  new Props(
    new UntypedActorFactory() {
      public UntypedActor create() {
         /// ????
      }
    })
 );

以前にバインドされたアクターAのインスタンスを返すにはどうすればよいですか?

4

1 に答える 1

2

によって暗示される質問を誤解しているかもしれませんが、????Guiceを使用しているときは、通常、多くのオブジェクトを更新しないようにします。Guiceが管理する新しいオブジェクトが必要な場合は、そのタイプのプロバイダーを要求するだけです。プロバイダーを作成しなかった場合でも、Guiceがバインドされているスコープのオブジェクトを再利用するか、必要なオブジェクトが挿入された新しいオブジェクトを提供する暗黙のプロバイダーがあります。

次のようになります。

class WhateverClassThisIs {
  private provider<A> providesA;

  @Inject
  public WhateverClassThisIs(provider<A> providesA) {
    this.providesA = providesA;
  }

  public whateverMethodThisIs() {
    actorSystem.actorOf(
    new Props(
      new UntypedActorFactory() {
        public UntypedActor create() {
           /// ???? translation: I need an object A here.
           A a = providesA.get();
        }
      })
    );
  }
}

他のクラスタイプを編集できる場合は、代わりに、コンストラクター/メソッドが必要とするオブジェクトを挿入して、newの使用を減らすことができます。

一方、正しい種類を取得するAには、このactorSystem.actorOf呼び出しを行う必要があると言っていた場合Aは、単にバインドするのではなく、これを行うプロバイダーを実装する必要があります。

于 2012-06-20T18:50:53.723 に答える