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

时间:2015-12-09 15:01:07

标签: 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: MailService) extends Actor {
...
}

现在,当我启动应用程序时,我生成错误:Error injecting constructor, java.lang.RuntimeException: There is no started application at services.MailService.<init>(MailService.scala:14)

但是,如果我将Logger添加到a​​ctor类

class Mailer @Inject() (service: MailService) extends Actor {
  Logger.info("Starting Mailer...")
  ...
}

没有错误。我不知道为什么会这样。它看起来不是一个好的解决方案。是其他人吗?

编辑:它没有用。看起来它是不确定的。我应该如何初始化它?

1 个答案:

答案 0 :(得分:1)

邮件本身可能存在问题。它是抛出异常的那个。它对应用程序本身有某种依赖性,有时应用程序已经在服务的初始化逻辑开始之前启动,有时它不是。也许你有更多的重构来处理服务,并向其中注入一些东西,或者以任何方式延迟它的执行。也许你可以从邮件服务中添加代码。