【发布时间】:2016-02-28 06:04:56
【问题描述】:
我按照戏剧描述如何使用演员: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")
//...
}
但这会导致:
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]
Tos 看看我做了什么或跟随:https://github.com/dataplayground/playground
编辑:
删除@Singleton 会导致:
could not find implicit value for parameter timeout: akka.util.Timeout
这是代码:
implicit val timeout = 5.seconds
def sayHello(name: String) = Action.async {
(helloActor ? SayHello(name)).mapTo[String].map { message =>
Ok(message)
}
}
【问题讨论】:
-
好的 - 那么文档是否过时了?至少这个错误消失了。但是,该示例似乎仍然存在问题。见编辑
-
implicit val timeout = akka.util.TimeOut(5.seconds) -
顺便说一句,你导入
javax.inject.Singleton了吗? -
非常感谢!这就是解决方案。我应该写一个解决方案吗?还是你想写一个?
-
不,我没有导入@Singleton,因为这里没有提到它:playframework.com/documentation/2.4.x/ScalaAkka
标签: playframework singleton akka playframework-2.4