1

似乎我能够在不使用模块的情况下注入服务或 Akka Actor。我可以知道模块的目的是什么吗?

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
}
4

1 回答 1

2

模块基本上实例化了服务,当您将它们注入控制器时,所有控制器共享同一个实例(这是我们想要的)。如果不声明模块中的绑定,您将在每个控制器中拥有一个新的服务实例(这不是我们想要的)。

然而在阿卡它恰恰相反

斯卡尔迪的引述

我想指出 Actor 是如何绑定的。重要的是,您将它们与 toProvider 函数绑定。当您使用 injectActorRef 或 injectActorProps 注入 Actor 类时,它将确保 Scaldi 始终创建 Actor 类的新实例

于 2017-01-29T01:04:32.207 回答