2016-05-09 11 views
3

によって取得thatsのは、以下のクラスを考えてみましょう:どのインスタンスに暗黙の値を渡すことはGuiceの

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

と、このクラスを取得するコード:

app.injector.instanceOf[MyClass] 

私はGuiceのインジェクタを理解して何から、その暗黙のExecutionContextにExecutionContextを挿入しますが、場合によってはそのインスタンスに別のインスタンスを指定したいと考えていますExecutionContext

私はそれをやろうとしていた。

ありがとうございました。

+0

私は、依存性注入(guice - 内部Playを介して)と暗黙的なパラメータの2つの分離したものを混ぜていると思います。この特定のケースでは、暗黙のパラメータを1つ持つクラスを宣言している間に 'ws'を注入しています。 https://playframework.com/documentation/2.5.x/ScalaDependencyInjection#Declaring-runtime-DI-dependencies – mfirry

+0

を参照してください。そのクラスの暗黙のパラメータに値を渡すにはどうすればいいですか? – Gleeb

+0

スカラ暗黙のパラメータの詳細については、こちらをご覧ください。ここにリンクがあります(しかし、たくさん見つけることができます)。http://daily-scala.blogspot.it/2010/04/implicit-parameters.html – mfirry

答えて

4

アノテーション@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でモジュールを有効にする必要があることです。

関連する問題