在启动时向 Play 2.4 中的 actor 注入服务
Injecting service to an actor in Play 2.4 on startup
我目前正在迁移到 Play 2.4,但在向演员注入服务时遇到了问题。
我已将 actor 创建从 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
添加到演员 class
class Mailer @Inject() (service: MailService) extends Actor {
Logger.info("Starting Mailer...")
...
}
没有错误。我不知道为什么它会这样。这看起来不是一个好的解决方案。还有其他的吗?
编辑:它不起作用。看起来它是不确定的。我应该如何初始化它?
邮件程序本身可能存在问题。它是抛出异常的那个。它对应用程序本身有某种依赖性,有时应用程序在服务的初始化逻辑启动之前就已经启动,有时则不然。也许您需要对服务进行更多重构,并向其中注入一些东西,或者以任何方式延迟其执行。也许您可以添加来自邮件服务的代码。
我目前正在迁移到 Play 2.4,但在向演员注入服务时遇到了问题。
我已将 actor 创建从 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
添加到演员 class
class Mailer @Inject() (service: MailService) extends Actor {
Logger.info("Starting Mailer...")
...
}
没有错误。我不知道为什么它会这样。这看起来不是一个好的解决方案。还有其他的吗?
编辑:它不起作用。看起来它是不确定的。我应该如何初始化它?
邮件程序本身可能存在问题。它是抛出异常的那个。它对应用程序本身有某种依赖性,有时应用程序在服务的初始化逻辑启动之前就已经启动,有时则不然。也许您需要对服务进行更多重构,并向其中注入一些东西,或者以任何方式延迟其执行。也许您可以添加来自邮件服务的代码。