所以我在这里关注模板: 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)
由此,我们可以在控制器中注入某些依赖项。现在已经删除了,我们再也无法做到了。有办法解决这个问题吗?
答案 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系统遵循应用程序生命周期和 应用程序重新启动时自动重新启动。