我正在使用Spray for REST端点。
如何才能访问特征中的现有ActorSystem
?
我不想在我的特征中创建新的ActorSystem
(如果可能),而是重用我现有的ActorSystem
。我正在使用this Redis客户端库。
trait MySprayService extends HttpService with Json4sSupport {
//the following line requires an implicit ActorSystem
val redis = RedisClient(ip,port)
....
....
val simpleRoute = path("simple" / "route") {
get {
complete {
//use Redis here
}
}
}
}
答案 0 :(得分:5)
实现相同目标的另一种方法是使用自我类型注释。
trait MySprayService extends HttpService with Json4sSupport {
this: Actor =>
implicit val sys = context.system
val redis = RedisClient(ip,port)
.....
使用自我类型声明,您指定从此特征扩展的类也必须从Actor扩展(无论如何都要运行该路径)。否则编译器将生成错误。在自我声明之后,您可以继续使用Actor的任何成员。
这样,就没有额外的方法可以实现。
答案 1 :(得分:3)
你可以创建一个返回ActorSystem的抽象方法,然后在一个扩展这个特性的类中提供实现。
trait MySprayService extends HttpService with Json4sSupport {
implicit def as: ActorSystem
//the following line requires an implicit ActorSystem
val redis = RedisClient(ip,port)
....
....
val simpleRoute = path("simple" / "route") {
get {
complete {
//use Redis here
}
}
}
}