2016-05-09 34 views
3
檢索

考慮下面的類:如何通過一個隱含的價值的實例,多數民衆贊成由吉斯

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

,並應該得到這個類的代碼:

app.injector.instanceOf[MyClass] 

從我瞭解的吉斯注射器,將ExecutionContext注入到隱式ExecutionContext中,但在某些情況下,我希望給出該實例不同的ExecutionContext

我應該這樣做。

謝謝。

+0

我認爲你正在混合兩個分開的東西:依賴注入(通過guice - 內播放)和隱式參數。在這個特定的情況下,你在聲明一個具有一個隱式參數的類時注入'ws'。請參閱https://playframework.com/documentation/2.5.x/ScalaDependencyInjection#Declaring-runtime-DI-dependencies – mfirry

+0

好吧,那麼如何將值傳遞給該類隱式參數 – Gleeb

+0

您可能想了解有關Scala隱式參數的更多信息。這裏有一個鏈接(但你可以找到很多)http://daily-scala.blogspot.it/2010/04/implicit-parameters.html – mfirry

回答

4

您可以使用annotation @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類的實現(然後最好將其作爲一個特性並在不同的類中實現)。這裏唯一的玩特定的事情是,如果你定義一個模塊,你需要在config中啓用模塊。

相關問題