我正在尝试将我的应用从2.3迁移到2.4。 在我们的代码库中,我们广泛使用了消息,因此任何删除它的方法也会有所帮助。 目前我们的代码是这样的
class MyController @Inject()
(val messagesApi: MessagesApi) extends Controller with I18nSupport{
def methodA() = {
new MyControllerService.doSomething()
}
}
class MyControllerService{
def doSomething()(implicit messages:Messages){
messages(any_key)
}
}
编译此代码时,我收到错误:(31,84)Play 2 Compiler:找不到参数消息的隐含值:play.api.i18n.Messages编译时错误消息。
请帮助解决此问题,欢迎以更好的方式改善此类问题的任何建议。
答案 0 :(得分:0)
以这种方式做到:
class MyController @Inject()
(val messagesApi: MessagesApi) extends Controller with I18nSupport{
def methodA() = { request =>
implicit val messages = messageApi.prefered(request)
new MyControllerService.doSomething()
}
}
class MyControllerService{
def doSomething()(implicit messages:Messages){
messages(any_key)
}
}
或者您可以通过以下方式直接传递已创建的消息对象:
new MyControllerService.doSomething()(messages)
答案 1 :(得分:0)
你需要在你的Action中有一个隐式请求,并且需要像这样导入“inject”:
package controllers
import javax.inject.Inject
import javax.inject._
import play.api.i18n.{ I18nSupport, MessagesApi, Messages, Lang }
import play.api._
import play.api.mvc._
class Application @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport {
def home() = Action { implicit request =>
Ok(views.html.home()).as(HTML)
}
}
此外,您需要在build.sbt中启用注入的路由器:
routesGenerator := InjectedRoutesGenerator