我有以下代码
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] ^
我做了一些研究,似乎找不到implicit
的{{1}}值。它似乎必须像控制器一样注入,但我不知道如何因为我在这里面对MessagesAPI
和object
。 1}}注释不被接受。
我该如何解决这个问题?
答案 0 :(得分:4)
来自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
...