当我调用 akka.http.scaladsl.Http.apply() 时,从哪里提供隐式?
where is the implicit being supplied from when i invoke akka.http.scaladsl.Http.apply()?
我正在使用 Akka HTTP 来支持 REST,我需要在另一个部分使用 Actors
我正在开发的服务器。我的理解是通常需要使用一个 ActorSystem
整个应用程序中的实例。根据 akka.http.scaladsl.Http.apply() 的定义,
似乎当我使用 Http 方法时,就像我下面的代码片段中一样 --
val service: FooRestService = new FooRestService()
Http(). bindAndHandle(service.route, "localhost", 8080) // something is supplying the imply method w/ implicit ActorSystem !
--- Http 对象的 apply() 方法以某种方式提供了隐式 ActorSystem 实例...为了便于参考,Http.apply() 定义如下:
package akka.http.scaladsl.Http
...
object Http {
...
def apply()(implicit system: ActorSystem): HttpExt = super.apply(system)
因为我需要严格遵守一个 ActorSystem 实例,所以我想在我的系统中提供另一个(非 REST)基于 Actor 的代码
与提供给 Http apply() 方法的引用相同。
我猜想我的代码一定是在用一个带有隐式 ActorSystem 的包对象对包进行包导入,或者
一定是通过其他方式,这种隐含就像夜深人静时的忍者一样悄悄溜进来。我已经四处寻找了很多,
但想不通 ;^(
非常感谢任何建议!
不确定我是否完全理解问题所在,但在你的每个演员中你都有 context: ActorContext
。您可以从 context.system
获得 ActorSystem
。因此,您不需要显式传递 ActorSystem
。
以下是我如何使用@expert 的回答(上图)来调试我的隐式来源。关键是从获取隐式的 Actor 中转储系统变量。然后查看名称以找出隐式的来源。在我的例子中,隐式来自我自己的代码(多么愚蠢!)。无论如何..感谢上面的答案,我的问题已经解决了。
val http: HttpExt = Http()
val sys = http.system
System.out.println("sys:" + sys);
http. bindAndHandle(
service.route, "localhost", injector.getInstance(classOf[Conf]).getInt(PROVISIONER_PORT )
)
我正在使用 Akka HTTP 来支持 REST,我需要在另一个部分使用 Actors 我正在开发的服务器。我的理解是通常需要使用一个 ActorSystem 整个应用程序中的实例。根据 akka.http.scaladsl.Http.apply() 的定义, 似乎当我使用 Http 方法时,就像我下面的代码片段中一样 --
val service: FooRestService = new FooRestService()
Http(). bindAndHandle(service.route, "localhost", 8080) // something is supplying the imply method w/ implicit ActorSystem !
--- Http 对象的 apply() 方法以某种方式提供了隐式 ActorSystem 实例...为了便于参考,Http.apply() 定义如下:
package akka.http.scaladsl.Http
...
object Http {
...
def apply()(implicit system: ActorSystem): HttpExt = super.apply(system)
因为我需要严格遵守一个 ActorSystem 实例,所以我想在我的系统中提供另一个(非 REST)基于 Actor 的代码 与提供给 Http apply() 方法的引用相同。
我猜想我的代码一定是在用一个带有隐式 ActorSystem 的包对象对包进行包导入,或者 一定是通过其他方式,这种隐含就像夜深人静时的忍者一样悄悄溜进来。我已经四处寻找了很多, 但想不通 ;^(
非常感谢任何建议!
不确定我是否完全理解问题所在,但在你的每个演员中你都有 context: ActorContext
。您可以从 context.system
获得 ActorSystem
。因此,您不需要显式传递 ActorSystem
。
以下是我如何使用@expert 的回答(上图)来调试我的隐式来源。关键是从获取隐式的 Actor 中转储系统变量。然后查看名称以找出隐式的来源。在我的例子中,隐式来自我自己的代码(多么愚蠢!)。无论如何..感谢上面的答案,我的问题已经解决了。
val http: HttpExt = Http()
val sys = http.system
System.out.println("sys:" + sys);
http. bindAndHandle(
service.route, "localhost", injector.getInstance(classOf[Conf]).getInt(PROVISIONER_PORT )
)