0

injizieren Ich benutze die Play-Framework-Version 2.49, ich versuche, eine Abhängigkeits-Injektion zu tun, und es ist mein erstes Mal, dies zu tun. Ich habe 3 Ordner-Schnittstelle: Repository: Controller. Die Schnittstelle legt abstrakte Methoden fest, die ich in einem Repository-Ordner implementiere und dann in eine Controller-Aktion injiziere. Ich bin nur verloren, wenn es um die Controller-Aktion geht. Hier ist ein Beispielcode von MinenScala PlayFramework wie kann ich Repository-Methode in Funktion

Schnittstelle

package Interface 


abstract class Iprofiles { 
    def edit_profile 
    def view_profile 
    def forgot_password 

} 

Repository

package Repository 

import Interface.Iprofiles 
import slick.driver.PostgresDriver.api._ 

class ProfileRepository extends Iprofiles { 
    val db= Database.forConfig("database") 

// These 3 methods will have Database logic soon 
    def edit_profile: Unit 
    def view_profile: Unit 

    def forgot_password: Unit 
} 

-Controller

package controllers 

import play.api.data.Form 
import play.api.data.Forms._ 
class Relations extends Controller { 


    def MyAction() = Action { 
// How can I inject edit_profile in the repository folder here 
Ok() 

} 



} 

Meine Repository-Methoden sind im Moment leer, aber ich werde bald Datenlogik in ihnen haben. In meinem Controller MyAction() Methode zum Beispiel, wie kann ich eine DI und einschließlich edit_profile aus dem Repository-Ordner? Ich habe gesucht, wie man das erledigt, aber nichts hat funktioniert

+0

Ich habe DI in Play (meist mit Guice) für Paare letzten Tagen, und mein Verständnis ist, dass der empfohlene Weg ist, indem Abhängigkeiten durch Konstruktoren, nicht in Methoden injiziert. Wäre das für Sie akzeptabel? – michaJlS

Antwort

0

Dependency Injection auf der JVM ist derzeit nur über das injizieren von Objektreferenzen, nicht Methodenreferenzen. Das heißt, Sie deklarieren in einer Klasse eine Abhängigkeit von einem Typ (in der Regel eine Schnittstelle) und definieren die Zuordnung von diesem (Schnittstellentyp) zu einer Implementierung (Typ) in der Injektorkonfiguration. Während der Injektion - typischerweise während der Objektkonstruktion - erhalten Sie einen Verweis auf ein Objekt vom Implementierungstyp injected.

Dann können Sie alle Methoden für dieses injizierte Objekt aufrufen.

Sie benötigen also ein Attribut, das den Verweis übernimmt, und das wird normalerweise über einen Konstruktorparameter gefüllt.

Verwandte Themen