考虑以下课程:
class MyClass @Inject() (ws: WSClient)(implicit executionContext: ExecutionContext)
以及获取此类的代码:
app.injector.instanceOf[MyClass]
根据我对guice注入器的理解,将ExecutionContext
注入到隐式ExecutionContext中,但在某些情况下我想为该实例提供不同的ExecutionContext
我该怎么做。
感谢。
答案 0 :(得分:5)
您可以使用注释@Named标记隐式参数,并为"命名"定义绑定。 ExecutionContext中。
class MyClass @Inject() (ws: WSClient)
(implicit @Named("myEC") executionContext: ExecutionContext)
绑定:
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。您还可以定义自己的注释或创建一个模块来绑定MyClass类的实现(然后最好将其作为特征并在不同的类中实现它)。这里唯一的Play特定的事情是,如果你定义了一个模块,你需要在config中启用模块。