2

我正在寻找让包含类获取其包含类所暴露的隐含的最佳语法?

我的场景有两个抽象的依赖项用于测试:创建应用程序的actorsystem,以及一个恰好也需要actorsystem的webclient:

trait Core {
  implicit def system: ActorSystem
}

trait WebClient {
  implicit def system: ActorSystem
}

trait Api extends WebClient {
  ...
}

trait Server extends Core {
  def api: Api
  val service = system.actorOf(Props(new Service(api)))
}

现在,我创建了一个提供actorsystem和api的新应用程序,但是Api需要一个隐式actorsystem,而我想出的唯一方法是像这样手动提供它:

object ServerApp extends App with Core {

  implicit val system = ActorSystem("foo")

  val api = new Api {
    override implicit def system = implicitly[ActorSystem]
  }

}

有没有更好的语法让 WebClient 从 Core 中获取隐式?我不能让它扩展核心,因为它包含在核心实现中,并且需要作为包含在那里的其他东西的依赖项。但是对于应该是,呃,隐含override implict def system = implicitly[ActorSystem]的东西似乎相当笨拙

4

1 回答 1

2

您正在隐藏隐式值,因为它们具有相同的名称。

你可能会考虑

class Api()(implicit val system: ActorSystem)

val api = new Api
于 2014-09-02T02:56:28.073 回答