似乎我可以在不使用Module的情况下注入Services或Akka Actors。我可以知道Module的目的是什么?
class Hello(implicit inj:Injector) extends Controller with AkkaInjectable {
val greetingService = inject[GreetingService]
implicit val system = inject [ActorSystem]
val greetingActor = injectActorRef[greetingActor]
def greet(person:Person) = Action {
Ok(greetingService.greet(person.name))
}
}
即使没有以下它也可以正常使用
class MainModule extends Module {
binding to new GreetingService
bind [ActorSystem] to ActorSystem("ScaldiAkkaExample") destroyWith (_.terminate())
binding toProvider new StatisticsProvider
}
答案 0 :(得分:2)
模块基本上实例化服务,当您将它们注入控制器时,所有控制器共享同一个实例(这就是我们想要的)。 如果不在模块中声明绑定,您将在每个控制器中都有一个新的服务实例(这不是我们想要的)。
然而在Akka中则相反
引自scaldi
我想指出演员是如何受约束的。重要的是,用toProvider函数绑定它们。当您使用injectActorRef或injectActorProps注入它们时,它将确保Scaldi始终创建Actor类的新实例