插件如何在 play 2.4 中使用注入和对象而不是类
Posted
技术标签:
【中文标题】插件如何在 play 2.4 中使用注入和对象而不是类【英文标题】:how plugin works with inject and object instead of class in play 2.4 【发布时间】:2015-07-03 04:34:28 【问题描述】:我需要为 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)
【问题讨论】:
【参考方案1】:我假设您使用对象而不是类来使其成为单例。
有一个用于单例的特殊注释 (-> @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
【讨论】:
我不仅想使用单例,还想使用静态类。Object 非常适合,我的项目中有很多对象。你的意思是我必须将所有对象转换为类? 您不必将每个对象都转换为一个类。只有那些你想作为单例注入的。您还可以为每个对象编写一个包装器,但看起来单例注释似乎是一个更好的解决方案。 有没有办法使用 Inject 并且仍然使用 scala 对象?我有很多需要使用单例的对象。将每个这样的 Object 更改为 Singleton Scala 类将是我最后的手段,因为要更新的引用太多 你可以使用包装器,但你必须使用包装器类。以上是关于插件如何在 play 2.4 中使用注入和对象而不是类的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework 2.4 - 依赖注入替换 GlobalSettings.onStart()
如何使用 Play 实现预定的一次性流程! v1.2.4 和 Heroku Scheduler 插件