我期待在从播放邮件的鳞屑代码示例: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