播放2.4 scala我面临着在我的代码中隐含消息的问题

时间:2015-06-09 05:58:50

标签: scala playframework inject playframework-2.4

我正在尝试将我的应用从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编译时错误消息。

请帮助解决此问题,欢迎以更好的方式改善此类问题的任何建议。

2 个答案:

答案 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