2015-07-25 6 views
7

Wie mische ich typisierte und untypisierte Schauspieler? Wie ich verstanden habe ich Hauptdarsteller angeben, wenn ich Instanz ActorSystem wie dieseWie mische ich typisierte und untypisierte Schauspieler?

val system: akka.typed.ActorSystem[Start] = akka.typed.ActorSystem("main", Props(mainBehaviour)) 

Auf der anderen Seite schaffen verwende ich akka-http, die wie dieser

implicit val system = ActorSystem() 
implicit val executor = system.dispatcher 
implicit val materializer = ActorMaterializer() 
// etc... 

initialisiert sehe ich, dass ich kann, typisierte System von nicht typisierten System erstellen, indem

object ActorSystem { 
    def apply(untyped: akka.actor.ActorSystem): ActorSystem[Nothing] = new Wrapper(untyped.asInstanceOf[ExtendedActorSystem]) 
} 

ruft also unter der Annahme, ich habe

val typeSystem = akka.typed.ActorSystem(untypedSystem) 

Wie erstelle ich meinen ersten getippten Schauspieler von typeSystem? Es gibt keine getippten ActorContext deren actorOf ich anrufen kann.

Andere Materialien, die ich zu diesem Thema gelesen habe, sind

Antwort

3

Guter Fang, das ist momentan nicht bequem möglich: was Sie brauchen würde, do ist, das typisierte ActorSystem zu erstellen und dann auf das zugrunde liegende untypisierte zuzugreifen, um die HTTP-Erweiterung zu starten, aber die underlying Methode ist private[akka]. Sie könnten diese zugreifen, indem einige Helfer Code in einem Projekt innerhalb des Akka Namespace platzieren, oder Sie könnten in die andere Richtung gehen um:

implicit val untyped = akka.actor.ActorSystem("main") 
import untyped.dispatcher 
implicit val mat = ActorMaterializer() 

import akka.typed.Ops._ 
val typedRef = untyped.spawn(Props(mainBehaviour)) 
val typedSys = ActorSystem(untyped) 

Http().bind(...) // and send things to typed 
+0

Vielen Dank! Es funktioniert, aber die ganze Sache sieht ziemlich unfreundlich aus, wegen Namenskonflikten. Ich musste 'AskPattern.Askable (typedRef).? (Start)' schreiben. – expert

+1

Dann stimmt etwas nicht mit den Importen, bitte öffnen Sie ein Problem auf GitHub, damit wir es richtig beheben können. –

Verwandte Themen