我期待在從播放郵件的鱗屑代碼示例:https://github.com/playframework/play-mailer斯卡拉(播放的2.4.x)如何調用與@Inject()註釋類
它去基本上是這樣的:
class MyComponent @Inject() (mailerClient: MailerClient) {
...
}
足夠簡單,它編譯沒有符合
然後我試着然而,「呼叫」,並似乎沒有被滿足的編譯器或獲取mailerClient的工作實例的方式。
object AnObject {
val mailer = new MyComponent
def sendEmail = mailer.doStuff
}
[info] Compiling 1 Scala source to ...
[error] /SomeOne/SomePath/SomeFile.scala:30: not enough arguments for constructor MyComponent: (mailerClient: play.api.libs.mailer.MailerClient) MyComponent.
[error] Unspecified value parameter mailerClient.
[error] val mailer = new MyComponent
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
不過,我覺得我可能已經得到了接近得益於此:
How does @Inject in Scala work
這表明以下語法可以通過從構造的@Inject
,並把它放在一個領域的工作。
@Inject var mailerClient: MailerClient = null
但是,當我們嘗試運行任何需要該引用的東西時,我們仍然得到空值。
我讀的一切,我可以找到關於@Inject
([警示] [咆哮]我不是這個確切原因的編譯器魔術這樣的風扇 - 巫術是美好的,直到它[/ rant] [/ warning])
但我真正想知道的是如何正確,安全和有效地使用它。
僅供參考 - 這可能有助於那些只是爲了讓電子郵件工作... https://github.com/playframework/play-mailer/blob/master/src/test/scala/play/api/libs/mailer /MailerPluginSpec.scala – Techmag