3

我需要为 play 2.4 迁移 play mailer 插件。我检查了 play 2.4 的一些示例,发现所有示例都使用插件类。我不想将其转换为类。有没有办法让它与 Object 一起工作?

样本

class MyComponent @Inject() (mailerClient: MailerClient) {
    def sendEmail {
       val email = Email(......)
       ......
       mailerClient.send(email)
    }
}

原始代码

object MailHandler{
  def sendEmail(to: String) = {
try {
  val email = play.api.libs.mailer.Email(...)
  MailerPlugin.send(email)
}catch{
  case ex:Exception=>PlayLogger.instance.error(ex.getMessage)
}
}
4

1 回答 1

2

我假设您使用对象而不是类来使其成为单例。

单例 (-> @Singleton) 有一个特殊注释,可确保只创建一个类的实例。

尽管他们仍然使用实际的类而不是对象。

一个示例可能如下所示:

import javax.inject._

@Singleton
class MailerClient {
  def sendEmail(to: String) = {
    try {
      val email = play.api.libs.mailer.Email(...)
       MailerPlugin.send(email)
    }catch{
      case ex:Exception=>PlayLogger.instance.error(ex.getMessage)
    }
  }
}

查看文档: https ://www.playframework.com/documentation/2.4.x/ScalaDependencyInjection#Singletons

于 2015-07-03T08:40:41.313 回答