【问题标题】:How to gain access to the akka system created via guice?如何访问通过 guice 创建的 akka 系统?
【发布时间】:2015-09-21 19:15:31
【问题描述】:

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

我已将此代码移植到 2.4 版 Play 应用中。

现在我可以创建演员系统并在 Global 类中创建演员并将初始消息发送给演员。我还设置了尝试与某些演员交谈并获得状态的路线,但我无法访问,因为我无法访问原始演员系统。

我怎样才能做到这一点?我认为在较旧的 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)

由此,我们可以在控制器中注入某些依赖项。既然这被删除了,我们就不能再这样做了。有没有办法解决这个问题?

【问题讨论】:

  • 我有点困惑。为什么要创建一个新的 Akka 系统? Play 已经包含一个,您可以通过Akka.system() 访问它。

标签: scala playframework guice playframework-2.4


【解决方案1】:

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 系统,供 应用。该参与者系统遵循应用程序生命周期和 应用程序重新启动时自动重新启动。

【讨论】:

    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 2018-04-26
    • 2016-06-29
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多