如何访问通过guice创建的akka​​系统?

时间:2015-09-21 19:15:31

标签: scala playframework guice playframework-2.4

所以我在这里关注模板: https://github.com/rocketraman/activator-akka-scala-guice#master

我已将此代码移植到2.4 Play应用程序。

现在我能够创建actor系统并在Global类中创建actor并将初始消息发送给actor。我也设置路线试图与某些演员交谈并获得状态,但我无法访问原来的演员系统。

我怎样才能做到这一点?我认为在较旧的Play版本中,我们有getControllerInstance;用于以下内容:

  /**
   * Controllers must be resolved through the application context. There is a special method of GlobalSettings
   * that we can override to resolve a given controller. This resolution is required by the Play router.
   */
  override def getControllerInstance[A](controllerClass: Class[A]): A = injector.getInstance(controllerClass)

由此,我们可以在控制器中注入某些依赖项。现在已经删除了,我们再也无法做到了。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

It's pretty clear how to inject Akka system in to the controller

import play.api.mvc._
import akka.actor._
import javax.inject._

import actors.HelloActor

@Singleton
class Application @Inject() (system: ActorSystem) extends Controller {

  val helloActor = system.actorOf(HelloActor.props, "hello-actor")

  //...
}

接受注意 @Singleton 这里只存储对actor的引用 - 而不是ActorSystem,it's handled by the Play in backend

  

Play应用程序定义了一个特殊的actor系统   应用。这个actor系统遵循应用程序生命周期和   应用程序重新启动时自动重新启动。