0

我正在尝试创建一个简单的服务来使用 Lagom 框架和 Scaladsl 发送电子邮件。我正在尝试使用 Play Mailer 插件来处理电子邮件,但我正在努力尝试将其注入服务实现。

mailerClient我创建了服务特征和实现,在构造函数中将其作为依赖项传递。

trait MailerService extends Service { ... }

class MailerServiceImpl(mailerClient: MailerClient, persistentEntityRegistry: PersistentEntityRegistry) extends MailerService {
...
}

我按照Lagom 文档和使用 macwire 的 hello world 应用程序中解释的模式在 ApplicationLoader 中连接服务。

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 中的工作方式有什么问题,但我无法弄清楚。

有任何想法吗?

4

1 回答 1

3

为了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 文档中进行了描述

于 2017-09-12T08:15:35.287 回答