WebSocket.acceptWithActor
instanziiert einen neuen Akka-Darsteller, ohne Guice zu benutzen.
Mit Play 2.4 war die Verwendung des Injektors für meinen Darsteller noch möglich, indem play.api.Play.current
importiert wurde.
Snippet aus ReactiveMongo-Dokumentation :
%Vor% Aber in Play 2.5 ist play.api.Play.current
veraltet. Wie kann ich ReactiveMongoApi
noch in meinen Darsteller einfügen? Was ist die empfohlene Vorgehensweise für die Verwendung einer Instanz von ReactiveMongoApi
in meinem Akteur?
Hier ist mein Code, der mit Play 2.4 funktioniert, weil meine benutzerdefinierte Aktor-Klasse ClientActor
Zugriff auf ReactiveMongoApi
through current.injector.instanceOf[ReactiveMongoApi]
:
Ich glaube nicht, dass das möglich ist. Zitieren James Roper :
Die Helfer, die Play für abhängigkeitsinjizierende Akteure bietet, sind für eine begrenzte Anzahl von Anwendungsfällen geeignet. Allerdings sind die Helfer wirklich nur sehr dünne Wrapper über einige allgemeine Anforderungen - sie werden überhaupt nicht benötigt. Im Fall von Play's WebSocket-Actor-Unterstützung ist die Sache, im Allgemeinen möchten Sie den Actor manuell instanziieren, da Sie ihm irgendwie den ActorRef übergeben müssen. Sie können dies entweder mit Guice assisted inject tun und eine Faktorschnittstelle definieren, die den out actor ref (und alle anderen Argumente, die Sie übergeben möchten) übernimmt oder sie einfach manuell instanziiert, indem Sie Abhängigkeiten vom Controller an den aktor übergeben zum Beispiel:
%Vor%
Play 2.5 hat Unterstützung für DI integriert.
MidiActor-Signatur muss wie unten beschrieben geändert werden.
%Vor%Erstellen Sie ein neues Modul und aktivieren Sie es in der application.conf
%Vor%Ändern Sie Ihren Controller wie folgt
%Vor%Tags und Links dependency-injection akka playframework guice playframework-2.5