WebSocket.acceptWithActor und @Inject () im Actor (Play 2.5)

9

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] :

hat %Vor%     
ideaboxer 19.08.2017, 17:32
quelle

2 Antworten

3

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%
    
rethab 22.08.2017, 06:14
quelle
0

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%     
Gajendra Naidu 22.08.2017 10:01
quelle