2016-02-22 48 views
1

首先,感謝您嘗試回答問題。 從當前的應用程序注入器(play.api.Play.current.injector),我如何獲得一個類的命名實例? 我試圖將注入器投射到ScalaInjector(net.codingwell.scalaguice.InjectorExtensions.ScalaInjector)和Guice Injector(com.google.injectInjector),兩者都未成功。 問題是,只有3種方法實例化一個類,所有的人都超載}這種[T]嘗試實例化命名(帶註釋的)類

回答

3

對於一個正常的依賴,你會做

play.api.Play.current.injector.instanceOf[ProjectRepo] 

當你想檢索名爲依賴你可以做

val qualifier = Some(QualifierInstance(Names.named("name"))) 
val bindingKey = BindingKey[ProjectRepo](Class[ProjectRepo], qualifier) 

play.api.Play.current.injector.instanceOf[ProjectRepo](bindingKey) 

反正你只能直接在極少數情況下使用注射器,確保沒有一個簡單的檢索你的依賴的方式。

+0

它基本上用於測試,所以我可以先獲取對象並設置測試屬性。 – Eric

+0

如果你想要做的只是模擬一些依賴關係,你可以按照https://www.playframework.com/documentation/2.4.x/ScalaTestingWithGuice#Overriding-bindings-in-a-functional-test –

+0

你的問題是非常具體的使用注入器獲得一個Named實例,目前答案就是這個。 –