尝试在 Lagom 中注入依赖项时出错
Error trying to inject a dependency in Lagom
我正在尝试创建一个简单的服务来使用 Lagom 框架和 Scaladsl 发送电子邮件。我正在尝试使用 Play Mailer 插件来处理电子邮件,但我正在努力尝试将其注入服务实现。
我创建了服务特征和实现,将 mailerClient
作为构造函数中的依赖项传递。
trait MailerService extends Service { ... }
class MailerServiceImpl(mailerClient: MailerClient, persistentEntityRegistry: PersistentEntityRegistry) extends MailerService {
...
}
我正在 ApplicationLoader 中连接服务,遵循 Lagom documentation 和 hello world 应用程序中解释的模式,使用 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])
}
当我尝试编译时,出现以下错误。
[error]
/.../workspace/mailer/mailer-impl/src/main/scala/com/example/mailer/impl/MailerApplicationLoader.scala:92:
Cannot find a value of type: [play.api.libs.mailer.MailerClient]
我认为 macwire 能够从构造函数中理清依赖关系,但看起来并非如此。我尝试了不同的选项,比如尝试在应用程序加载器中显式连接它,但到目前为止没有任何成功。
我很确定我对 DI 在 Lagom 中的工作方式有误,但我无法弄清楚。
有什么想法吗?
要使 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 文档对此进行了描述
我正在尝试创建一个简单的服务来使用 Lagom 框架和 Scaladsl 发送电子邮件。我正在尝试使用 Play Mailer 插件来处理电子邮件,但我正在努力尝试将其注入服务实现。
我创建了服务特征和实现,将 mailerClient
作为构造函数中的依赖项传递。
trait MailerService extends Service { ... }
class MailerServiceImpl(mailerClient: MailerClient, persistentEntityRegistry: PersistentEntityRegistry) extends MailerService {
...
}
我正在 ApplicationLoader 中连接服务,遵循 Lagom documentation 和 hello world 应用程序中解释的模式,使用 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])
}
当我尝试编译时,出现以下错误。
[error] /.../workspace/mailer/mailer-impl/src/main/scala/com/example/mailer/impl/MailerApplicationLoader.scala:92: Cannot find a value of type: [play.api.libs.mailer.MailerClient]
我认为 macwire 能够从构造函数中理清依赖关系,但看起来并非如此。我尝试了不同的选项,比如尝试在应用程序加载器中显式连接它,但到目前为止没有任何成功。
我很确定我对 DI 在 Lagom 中的工作方式有误,但我无法弄清楚。
有什么想法吗?
要使 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 文档对此进行了描述