【问题标题】:could not find implicit value for parameter messages: play.api.i18n.Messages找不到参数消息的隐式值:play.api.i18n.Messages
【发布时间】:2016-11-08 23:10:59
【问题描述】:

我有以下代码

import play.api.i18n.{MessagesApi, Messages, I18nSupport}
import play.api.libs.json.Json

case class HttpMessage(key: String, message: String)

object HttpMessage {
  implicit val jsonFormat = Json.format[HttpMessage]

  def apply(key: String): HttpMessage = {
    HttpMessage(key, Messages(key))
  }
}

编译时抛出

[error] could not find implicit value for parameter messages: play.api.i18n.Messages
[error]     HttpMessage(key, messages(key))
[error]                              ^

我做了一些研究,似乎找不到MessagesAPIimplicit 值。似乎它必须像在控制器中一样注入,但我不知道如何注入,因为我在这里面临objectcase class。不接受@Inject 注释。

我该如何解决这个问题?

【问题讨论】:

  • 您可以标记您的对象@Singleton 并将其注入您需要的地方。
  • 或者尝试导入play.api.i18n.Messages.Implicits._
  • 我已经尝试过导入。不工作。
  • @insan-e 如何注入@Singleton
  • 您还需要在 Messagesimplicits 的范围内进行隐式应用,所以 import play.api.Play.current import play.api.i18n.Messages.Implicits._,它应该可以工作,但 Play.current 方法已被弃用。

标签: scala playframework


【解决方案1】:

来自https://stackoverflow.com/a/30843682/4496364的方法:

import play.api.Play.current import play.api.i18n.Messages.Implicits._

第一行已被弃用,因为 Play 现在尽可能使用 DI。

我的方法(不能说是好是坏):

case class HttpMessage(key: String, message: String)

object HttpMessage {
  implicit val jsonFormat = Json.format[HttpMessage]

  def apply(key: String)(implicit messages: Messages): HttpMessage = {
    HttpMessage(key, Messages(key))
  }
}

我必须创建类似的解决方案,所以我使用了隐式方式,Play 也在其模板中使用了这种方式。您的控制器中必须有 implicit request 才能正常工作。此外,在所有类似服务的课程中,您需要转发此implicit messages: Messages...

【讨论】:

  • 感谢您的解决方案。如果没有这两个进口,它似乎可以工作。所需的一切都是implicit messages: Messages。在其他情况下可能需要导入,但我已经在我的控制器中导入了它。
猜你喜欢
  • 2018-01-06
  • 2016-09-19
  • 2015-08-28
  • 2016-12-16
  • 2016-02-22
  • 2017-02-02
  • 2016-01-17
  • 2011-10-17
  • 2016-03-31
相关资源
最近更新 更多