Gle*_*eeb 3 scala guice playframework playframework-2.0
考虑以下课程:
class MyClass @Inject() (ws: WSClient)(implicit executionContext: ExecutionContext)
Run Code Online (Sandbox Code Playgroud)
以及获取此类的代码:
app.injector.instanceOf[MyClass]
Run Code Online (Sandbox Code Playgroud)
从我理解的guice注入器,注入一个ExecutionContext隐含的ExecutionContext,但在某些情况下,我想给该实例一个不同的ExecutionContext
我该怎么做呢
谢谢.
您可以使用注释@Named标记隐式参数,并为"命名"ExecutionContext定义绑定.
class MyClass @Inject() (ws: WSClient)
(implicit @Named("myEC") executionContext: ExecutionContext)
Run Code Online (Sandbox Code Playgroud)
绑定:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要在Play配置中启用该模块
play.modules.enabled += "my.modules.MyExecutionContextModule"
Run Code Online (Sandbox Code Playgroud)
有关注释的更多信息,请参阅Guice文档.您还可以定义自己的注释或创建一个模块来绑定MyClass类的实现(然后最好将其作为特征并在不同的类中实现它).这里唯一的Play特定的事情是你需要在配置中启用模块,如果你定义一个.