gpt4 book ai didi

scala - 如何将隐式值传递给由 guice 检索的实例

转载 作者:行者123 更新时间:2023-12-05 00:18:51 25 4
gpt4 key购买 nike

考虑以下类:

class MyClass @Inject() (ws: WSClient)(implicit executionContext: ExecutionContext)

以及获得此类的代码:
app.injector.instanceOf[MyClass]

根据我对 guice 注入(inject)器的理解,注入(inject) ExecutionContext进入那个隐含的 ExecutionContext,但在某些情况下,我想给那个实例一个不同的 ExecutionContext
我该怎么做。

谢谢。

最佳答案

您可以使用注释 @Named 标记隐式参数,并为“命名”ExecutionContext 定义绑定(bind)。

class MyClass @Inject() (ws: WSClient)
(implicit @Named("myEC") executionContext: ExecutionContext)

绑定(bind):
package my.modules

import scala.concurrent.ExecutionContext

import com.google.inject.AbstractModule
import com.google.inject.name.Names

class MyExecutionContextModule extends AbstractModule {
override def configure(): Unit = {
bind(classOf[ExecutionContext]).annotatedWith(Names.named("myEC"))
.to(classOf[MyExecutionContextImpl])
// .toInstance(myExecutionContext)
}
}

然后您需要在 Play 配置中启用该模块
play.modules.enabled += "my.modules.MyExecutionContextModule"

Guice docs有关注释的更多信息。您还可以定义自己的注释或创建一个 Module 来绑定(bind) MyClass 类的实现(然后最好将其设为 trait 并在不同的类中实现它)。此处唯一 Play 特定的事情是,如果您定义一个模块,则需要在配置中启用模块。

关于scala - 如何将隐式值传递给由 guice 检索的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37119387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com