アノテーション@Namedで暗黙のパラメータをマークし、 "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.modules.enabled += "my.modules.MyExecutionContextModule"
プレイ構成でモジュールを有効にする必要がありますが、アノテーションの詳細については、Guice docsを参照してください。独自の注釈を定義したり、モジュールを作成してMyClassクラスの実装をバインドすることもできます(次に、それを特性にして別のクラスに実装する方がよい)。 Play固有の唯一のことは、モジュールを定義する場合にconfigでモジュールを有効にする必要があることです。
私は、依存性注入(guice - 内部Playを介して)と暗黙的なパラメータの2つの分離したものを混ぜていると思います。この特定のケースでは、暗黙のパラメータを1つ持つクラスを宣言している間に 'ws'を注入しています。 https://playframework.com/documentation/2.5.x/ScalaDependencyInjection#Declaring-runtime-DI-dependencies – mfirry
を参照してください。そのクラスの暗黙のパラメータに値を渡すにはどうすればいいですか? – Gleeb
スカラ暗黙のパラメータの詳細については、こちらをご覧ください。ここにリンクがあります(しかし、たくさん見つけることができます)。http://daily-scala.blogspot.it/2010/04/implicit-parameters.html – mfirry