在游戏中使用演员

Geo*_*ler 7 singleton akka playframework playframework-2.4

我按照戏剧描述如何使用演员:https://www.playframework.com/documentation/2.4.x/ScalaAkka他们建议如下:

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

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

  //...
}
Run Code Online (Sandbox Code Playgroud)

但这会导致:

play.sbt.PlayExceptions$CompilationException: Compilation error[trait Singleton is abstract; cannot be instantiated]
        at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
        at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
        at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
        at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) ~[na:na]
        at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) ~[na:na]
        at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
        at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
        at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
        at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
        at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
Run Code Online (Sandbox Code Playgroud)

Tos看到我做了什么或跟着做了什么:https://github.com/dataplayground/playground

编辑:

@Singleton导线移至:

could not find implicit value for parameter timeout: akka.util.Timeout
Run Code Online (Sandbox Code Playgroud)

这是代码:

implicit val timeout = 5.seconds

def sayHello(name: String) = Action.async {
  (helloActor ? SayHello(name)).mapTo[String].map { message =>
    Ok(message)
  }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*shy 9

使用

implicit val timeout = akka.util.Timeout(5.seconds)
Run Code Online (Sandbox Code Playgroud)

import javax.inject.Singleton

  • + @ Singleton`的原始问题似乎要通过此修复解决.因此可以将它与`javax.inject.Singleton`的导入一起使用 (4认同)