我正在 Play Framework (Scala) 中尝试一些示例。我正在将一个演员注入控制器。
配置
- Java ( 1.8.0_144 )
- 斯卡拉(2.12.3)
- 播放(2.6.5)
我有以下代码:
ExampleController
class ExampleController @Inject() (
controllerComponents: ControllerComponents,
@Named("injected-router") injectedRouterActor: ActorRef,
@Named("injected") injectedActor: ActorRef)
extends AbstractController(controllerComponents) {
def alive = Action {
injectedActor ! "Hi from Example"
injectedRouterActor ! "Hi From Example to Router"
Ok("Alive")
}
}
注入演员
class InjectedActor extends Actor {
val name = s"IA-${self.path}-${System.nanoTime}"
println(s"constructor: $name")
def receive = {
case m => println(s"$name received: $m")
}
override def preStart() = {
println(s"preStart: $name")
super.preStart()
}
}
InjectedRouterActor
class InjectedRouterActor extends Actor {
val name = s"IRA-${self.path}-${System.nanoTime}"
println(s"constructor: $name")
def receive = {
case m => println(s"$name received: $m")
}
override def preStart() = {
println(s"preStart: $name")
super.preStart()
}
}
儿童演员
class ChildActor extends Actor {
val name = s"CH-${self.path}-${System.nanoTime}"
println(s"constructor: $name")
def receive = {
case m => println(s"$name received: $m")
}
}
模块
class BindingModule extends AbstractModule with AkkaGuiceSupport {
def configure = {
bindActor[InjectedActor]("injected")
bindActor[InjectedRouterActor]("injected-router", _ => RoundRobinPool(5).props(Props[ChildActor]))
}
}
当我运行它并为alive打路线时,我看到控制台上所有可见的演员的println s,除了InjectedRouterActor。
无法理解为什么?任何帮助表示赞赏。
谢谢