Scala 启动时向Play 2.4中的演员注入服务

Scala 启动时向Play 2.4中的演员注入服务,scala,playframework,playframework-2.4,Scala,Playframework,Playframework 2.4,我目前正在迁移到Play 2.4,在为参与者注入服务时遇到了问题 我已将演员创建从GlobalSettings.onStart移动到一个模块 模块: class MailerModule extends AbstractModule with AkkaGuiceSupport { override def configure() = { bindActor[Mailer]("mailer") } } 演员: class Mailer @Inject() (service: Ma

我目前正在迁移到Play 2.4,在为参与者注入服务时遇到了问题

我已将演员创建从
GlobalSettings.onStart
移动到一个模块

模块:

class MailerModule extends AbstractModule with AkkaGuiceSupport {
  override def configure() = {
    bindActor[Mailer]("mailer")
  }
}
演员:

class Mailer @Inject() (service: MailService) extends Actor {
...
}
现在,当我启动应用程序时,生成错误:
错误注入构造函数,java.lang.RuntimeException:没有启动的应用程序
在services.MailService.(MailService.scala:14)

但是,如果我向actor类添加
Logger

class Mailer @Inject() (service: MailService) extends Actor {
  Logger.info("Starting Mailer...")
  ...
}
没有错误。我不知道它为什么会这样。这看起来不是一个好的解决方案。其他的有吗


编辑:它不起作用。看起来这是不确定的。如何初始化它?

邮件程序本身可能存在问题。正是它引发了异常。它对应用程序本身有某种依赖性,有时应用程序在服务的初始化逻辑启动之前就已经启动了,有时则不然。也许您需要对服务进行更多的重构,并向其中注入一些东西,或者以任何方式延迟其执行。也许您可以从邮件服务中添加代码。

MailService
扩展了trait,该trait具有
val wsClient=Play.current.injector.instanceOf[wsClient]
。我只需要让它
lazy val
就行了。非常感谢。