2017-09-01 1 views
0

Im Play Scala 2.5-Anwendung, ich mein Controller wie-Wie können wir rufen Funktionen von anderen Controllern in einem Spiel scala Controller

class Application @Inject() (ws:WSClient) extends Controller{ 

Nun definieren, ich möchte eine Funktion readConfig() eines anderen Controller Klassen- ConfigReader anrufen Gibt es eine Möglichkeit, dies zu tun, wenn ich keine Dienste für diese speziellen Anwendungsfälle der Freigabe von Funktionen in Controllern verwende?

Im Spiel 2.4, mit Controllern als Objekte, könnte ich es einfach mit Appliation.readConfig() tun. Wie können wir das mit Controllern als Klassen machen?

+4

Wenn Sie sich ein anderes wollen finden anrufen Controller, möchten Sie vielleicht Ihre Architektur in Frage stellen: Controller sollen keine Logik enthalten. Sie können besser eine zusätzliche Klasse (die kein Controller ist) mit gemeinsamer Logik erstellen, die Sie in beiden Controllern verwenden können. Unter den Vorteilen sind: Testen, können Sie etwas mit dem Ergebnis tun (wenn Sie einen Controller von einem Controller aufrufen, wird das Ergebnis ein "Ergebnis" sein) – rethab

+0

@rethab danke, – user189107

+0

@rethab, Jetzt habe ich ein separates Dienste pacakge mit einer Klasse (DataOperations), die Funktionen enthält, die von den Controllern gemeinsam genutzt werden sollen. Eine Funktion readConfig() müsste dabei eine json-Datei mit dem classLoader von play lesen. Sollte ich DataOperations als Klasse verwenden oder sie als Objekt deklarieren, würde diese Funktion erfordern, dass das Environment-Objekt den aktuellen Anwendungskontext erhält. Können Sie mir eine effiziente Apprain vorschlagen, wie kann ich Funktionen von DataOperations im Application Controller aufrufen? – user189107

Antwort

-1

injizieren Sie einfach die Controller-Instanz:

Wenn Sie:

class ConfigReader @Inject() (ws:WSClient) extends Controller { 
    def readConfig() = ??? 
} 

sollten Sie in der Lage sein, es in andere Controller zu injizieren:

class Application @Inject() (ws:WSClient, configReader: controllers.ConfigReader) extends Controller { 
    def get() = Action { 
    configReader.readConfig() 
    } 
} 
Verwandte Themen