Playframework 2.0 在play 2应用程序中创建根角色的正确位置
我正在使用Play的演员系统为我的应用程序创建我的主管(root)演员 我需要对这个根参与者做的第一件事是向它发送一条消息来配置它自己和一组子参与者。配置包括使用TypeSafe配置API从conf文件中读取,然后将这些值加载到数据库中(本例中为MongoDB)。 因为我使用reactivemongo将配置从conf文件加载到数据库,所以它是完全非阻塞和异步的。控制器中的所有其他操作取决于加载到数据库的配置值 我不清楚我应该在哪里创作这个演员?我尝试在控制器的构造函数中创建它,但是如果在异步加载完成之前调用了一个操作,我会得到一个异常 我还尝试将它放在Global.onStart()中,但同样地,我无法在我的控制器代码中找到主管Playframework 2.0 在play 2应用程序中创建根角色的正确位置,playframework-2.0,akka,reactivemongo,Playframework 2.0,Akka,Reactivemongo,我正在使用Play的演员系统为我的应用程序创建我的主管(root)演员 我需要对这个根参与者做的第一件事是向它发送一条消息来配置它自己和一组子参与者。配置包括使用TypeSafe配置API从conf文件中读取,然后将这些值加载到数据库中(本例中为MongoDB)。 因为我使用reactivemongo将配置从conf文件加载到数据库,所以它是完全非阻塞和异步的。控制器中的所有其他操作取决于加载到数据库的配置值 我不清楚我应该在哪里创作这个演员?我尝试在控制器的构造函数中创建它,但是如果在异步加载
import play.api._
object Global extends GlobalSettings {
override def onStart(app: Application) {
Logger.info("Application has started")
val supervisor = Akka.system().actorOf(Props(new Supervisor()), "easupervisor")
}
}
我尝试直接在全局对象的构造函数中创建主管,但这也给了我一个播放初始化错误
object Global extends GlobalSettings {
val supervisor = Akka.system().actorOf(Props(new Supervisor()), "easupervisor")
override def onStart(app: Application) {
Logger.info("Application has started")
}
}
正确的位置是全局对象。我通常使用的方法是在
onStart
方法中初始化主管,并使用简单的基于构造函数的依赖项注入:
object Global extends GlobalSettings {
var supervisor: ActorRef = _
override def onStart(app: Application) {
supervisor = Akka.system().actorOf(Props(new Supervisor()), "easupervisor")
}
override def getControllerInstance[A](controllerClass: Class[A]): A = {
val MY_CONTROLLER = classOf[MyController]
val instance = controllerClass match {
case MY_CONTROLLER => new MyController(supervisor)
case _ => super.getControllerInstance(controllerClass)
}
instance.asInstanceOf[A]
}
}
作为替代方案,您还可以使用控制器中的地址获取主管-参与者引用。在play 2.4中的方法是什么?