2015-12-09 25 views
1

我目前正在遷移到Play 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到演員類

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

沒有錯誤。我不知道爲什麼它會這樣。它看起來不是一個好的解決方案。是其他人嗎?

編輯:它不起作用。看起來它是非確定性的。我應該如何初始化它?

回答

1

一個可能的問題是郵件本身。這是拋出異常的人。它對應用程序本身有一定的依賴性,有時應用程序在服務的初始化邏輯啓動之前就已經啓動了,有時它不是。也許你有更多的重構來處理這個服務,並且爲它注入一些東西,或者以任何方式延遲它的執行。也許你可以從郵件服務中添加代碼。

+0

'MailService'擴展了'val wsClient = Play.current.injector.instanceOf [WSClient]'的特徵。我只需要使它成爲'懶惰的val'就行了。謝謝! – lowercase

相關問題