我试图创建一个使用Lagom框架和Scaladsl发送电子邮件的简单服务。我试图使用Play Mailer插件来处理电子邮件,但我很难将它插入到服务实现中。
我创建了服务特性和实现,将mailerClient作为一个依赖项传递到构造函数中。
trait MailerService extends Service { ... }
class MailerServiceImpl(mailerClient: MailerClient, persistentEntityRegistry: PersistentEntityRegistry) extends MailerService {
...
}我正在ApplicationLoader中连接服务,遵循在Lagom文档和hello应用程序中使用macwire解释的模式。
abstract class MailerApplication(context: LagomApplicationContext)
extends LagomApplication(context)
with CassandraPersistenceComponents
with AhcWSComponents {
override lazy val lagomServer: LagomServer = serverFor[MailerService](wire[MailerServiceImpl])
override lazy val jsonSerializerRegistry = MailerSerializerRegistry
persistentEntityRegistry.register(wire[MailEntity])
}当我试图编译时,我会得到以下错误。
错误/.../workspace/mailer/mailer-impl/src/main/scala/com/example/mailer/impl/MailerApplicationLoader.scala:92:找不到类型值: play.api.libs.mailer.MailerClient
我原以为macwire能够从构造函数中分离出依赖项,但它看起来并不是真的。我尝试过不同的选项,比如尝试将其显式地连接到应用程序加载程序中,但到目前为止都没有成功。
我很确定,关于DI在Lagom中的工作方式,我有些地方弄错了,但我无法弄清楚。
有什么想法吗?
发布于 2017-09-12 08:15:35
要使MailerClient具有注入性,您需要将MailerComponents特性与您在服务中使用的其他特征混合在一起。
例如:
// ...
import play.api.libs.mailer._
abstract class MailerApplication(context: LagomApplicationContext)
extends LagomApplication(context)
with MailerComponents // add this here
with CassandraPersistenceComponents
with AhcWSComponents {
override lazy val lagomServer: LagomServer = serverFor[MailerService](wire[MailerServiceImpl])
override lazy val jsonSerializerRegistry = MailerSerializerRegistry
persistentEntityRegistry.register(wire[MailEntity])
}这在关于编译时注入的Play Mailer文档中进行了描述。
https://stackoverflow.com/questions/46170776
复制相似问题