【发布时间】:2013-09-28 17:35:24
【问题描述】:
我有一个 Play 2.1 应用程序。我还在使用 Subcut 进行依赖注入,它已经设置并适用于应用程序的大部分部分,除了一个。
假设我有以下与actor相关的sn-p代码:
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])
}
现在,假设我想使用 Subcut 将一些对象注入到 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
}
}
问题是:这样的actor是如何实例化的?
通常,由 Subcut 管理的对象是在 Subcut 的配置对象(即扩展 NewBindingModule 的对象)中构造的,或者在 Play 的控制器的情况下,在 Global 对象中构造(参见 play-subcut on github)。
我会用什么替换 Akka.system.actorOf(Props[FoobarActor]) 以覆盖参与者的实例化以传入绑定模块?
object Foobar {
val actor = /* what goes here? */
}
【问题讨论】:
-
你已经看过 DI 上的 Akka 文档了吗? doc.akka.io/docs/akka/2.2.1/scala/…
-
我不知道 subcut,但它可能就像提供
BindingModule作为构造函数参数一样简单。
标签: scala dependency-injection playframework akka subcut