2016-05-08 3 views
2

Ausgabe:2.5 DB Ausgabe spielen - Verwenden Sie Dependency Injection

Ich bin die unten Frage, die mich im Spiel 2.5 während Kompilierung.

Sie haben keine implizite Anwendung im Gültigkeitsbereich. Wenn Sie die aktuell laufende Anwendung in den Kontext bringen möchten, verwenden Sie bitte Abhängigkeitsinjektion.

Erste Ausgabe in line - DB.withConnection {^

-Code-Schnipsel:

object User { 
    def getId(emailid: String): Option[Int] = { 
    DB.withConnection { implicit c => 
     SQL("select id from user where email = {email}").on(
     'email -> emailid).as(SqlParser.scalar[Int].singleOpt) 
    } 
    } 
} 

Wie behebe ich das Problem?

Antwort

3

ich glaube, das Problem, das Sie ist wie folgt erfüllt:

You do not have an implicit Application in scope: PlayFramework with Oracle

a haben Versuchen Sie, das Paket 'play.ap zu importieren i.Play.current‘, fügen nämlich die folgenden in Ihrem Code-Datei

import play.api.Play.current 

haben ein gutes Glück

+3

Während dies das Problem jetzt löst, wird es in Play 2.5 zu einer Verwarnungswarnung führen. Sobald Sie auf 2.6 upgraden, werden Sie gezwungen sein, Dependency Injection zu verwenden. – rethab

+1

kann jemand erklären, wie dies mit Abhängigkeitsinjektion getan wird? – schub

4

Machen Sie User eine Klasse und injizieren Sie es, wo Sie es brauchen.

class User @Inject() (db: Database) { ..}

Und in Ihrem Controller: class MyController @Inject() (user: User) extends Controller { // .. user.getId // .. }

Lesen Sie mehr hier: https://www.playframework.com/documentation/2.5.x/ScalaDatabase

+0

Wie die User-Klasse in einem Zug als implizite faul val instanziiert? – Way

+0

können Sie den Benutzer als 'def 'definieren und den tatsächlichen Wert in der Unterklasse haben. – rethab