2016-07-06 6 views
1

Ich habe das folgende Stück Codekonnte nicht impliziten Wert für den Parameter Meldungen finden: play.api.i18n.Messages

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)) 
    } 
} 

Wenn kompiliert, es wirft

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

ich einige der Forschung gemacht und Es scheint, dass es keinen implicit Wert für MessagesAPI finden kann. Es scheint, dass es wie in Controllern injiziert werden muss, aber ich weiß nicht wie, denn ich bin hier mit einem object und case class konfrontiert. @Inject Anmerkung wird nicht akzeptiert.

Wie kann ich das beheben?

+0

Sie können Ihr Objekt @Singleton markieren und injizieren, wo Sie es brauchen. –

+0

Oder versuchen zu importieren play.api.i18n.Messages.Implicits._ –

+0

Ich habe bereits versucht zu importieren. Funktioniert nicht. – tzortzik

Antwort

4

Anfahrt von https://stackoverflow.com/a/30843682/4496364:

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

Die erste Zeile ist veraltet seit nun DI nutzt überall möglich.

Mein Ansatz (kann nicht sagen, ob gut oder schlecht):

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)) 
    } 
} 

ich ähnliche Lösung zu schaffen habe, so habe ich die implizite Art und Weise, die Wiedergabe auch die Vorlagen in es verwendet. Sie müssen in Ihrem Controller haben, damit dies funktioniert. Auch in allen service-ähnlichen Klassen müssen Sie diese weiterleiten implicit messages: Messages ...

+0

Danke für die Lösung. Es scheint ohne diese zwei Importe zu funktionieren. Alles, was benötigt wurde, waren "implizite Nachrichten: Nachrichten". Wahrscheinlich werden die Importe in anderen Fällen benötigt, aber ich habe es bereits in meine Controller importiert. – tzortzik