Play 2.1 アプリケーションがあります。また、Subcut を依存性注入に使用しています。これは、1 つを除いて、アプリケーションのほとんどの部分で既にセットアップされ、機能しています。
アクター関連のコードの次のスニペットがあるとします。
import akka.actor._
import com.typesafe.plugin._
import play.api.Play.current
import play.api.libs.concurrent.Akka
class FoobarActor extends Actor {
def receive = {
// do stuff here
}
}
object Foobar {
val actor = Akka.system.actorOf(Props[FoobarActor])
}
ここで、サブカットを使用する各インスタンスにいくつかのオブジェクトを挿入したいとしますFoobarActor
。これには、次のように、アクター クラスが をコンストラクターに渡しInjectable
て拡張する必要があります。BindingModule
import akka.actor._
import com.typesafe.plugin._
import play.api.Play.current
import play.api.libs.concurrent.Akka
import com.escalatesoft.subcut.inject.{Injectable, BindingModule}
class FoobarActor(implicit val bindingModule: BindingModule) extends Actor
with Injectable {
val bazProvider = inject[BazProvider]
val quuxProvider = inject[QuuxProvider]
def receive = {
// do stuff here
}
}
問題は、そのようなアクターをどのようにインスタンス化するかです。
通常、Subcut によって管理されるオブジェクトは、Subcut の構成オブジェクト (つまり、 を拡張するオブジェクトNewBindingModule
) 内に構築されるか、Play のコントローラーの場合はオブジェクト内に構築されます ( github の play-subcut をGlobal
参照)。
Akka.system.actorOf(Props[FoobarActor])
バインディング モジュールを渡すためにアクターのインスタンス化をオーバーライドするには、 何を置き換えますか?
object Foobar {
val actor = /* what goes here? */
}