2017-04-04 4 views
0

Ich versuche, eine POST-Anfrage wie die in den Akka-Dokumenten, die hier gezeigt wurden, zu schießen. http://doc.akka.io/docs/akka-http/current/scala/http/client-side/request-level.html#request-level-apiGet context from Hauptdarsteller in Akka

Allerdings versuche ich es als innerhalb einer anderen definierten Klasse zu tun. Wenn ich versuche, etwas hinzuzufügen, das die Actor context wie val http = HTTP(context.system) erfordert, erhalte ich einen Fehler. Wie kann ich den Kontext in die Klasse übergeben, von der ich versuche, die POST-Anfrage zu machen?

trait CustomerProfilesComponent { 
    def customerProfileManager: CustomerService.Async 
} 

object DefaultCustomerProfiles { 
    private case class ProfileUpdateData(path: Seq[String], data: JsObject, metadata: JsObject) 
} 

trait DefaultCustomerProfiles extends CustomerProfilesComponent { 
    self: DatabaseComponent with SourceVersionComponent with ExecutionContextComponent => 

    import DefaultCustomerProfiles._ 

    lazy val customerProfileManager = new CustomerService.Async { 

    import db.api._ 
    import AvroConverter._ 

    override def getVersion : Future[AvroVersion] = { 
     Future.successful(toAvro(sourceVersion)) 
    } 
} 

Antwort

0

Was Sie brauchen, ist eigentlich ein actor system. Veröffentlichung von den akka-http-Dokumente:

Die Anfrage-Level-API auf einem Verbindungspool implementiert wird, der innerhalb des ActorSystem geteilt wird.

Es gibt zwei Nutzungsszenarien für die Anforderung API:

  • Verwendung es within an actor - wenn man das Schauspieler-System über den Schauspieler Kontext (wie Sie versucht haben, aber da Sie nicht in einem sind Schauspieler, Sie haben nicht einen Schauspieler Kontext verfügbar)
  • es verwendet outside an actor (Ihr Fall) - wenn man das Schauspieler-System erhalten, indem es als eine Abhängigkeit Bereitstellung (entweder über Klasse/Methode params oder implizite params)

Ich hoffe, das ist hilfreich.