2017-07-07 72 views
-2

我有一個進口「進口play.api.libs.ws.WSClient」,我想我的對象依賴注入到斯卡拉對象(而不是類)

Object X { 
... 

} 

中使用但這似乎並沒有在我的對象內可用。我發現依賴注入只適用於類。我如何得到這個工作?

+0

's/object/class /'? – Dima

+0

@Dima我需要它是一個對象。 – user461112

回答

2

將依賴項注入到對象中是不可能的。

你有兩個選擇:

醜陋和棄用:訪問通過全球應用注射器:

val wsClient = Play.current.injector.instanceOf[WSClient] 

走的路,如果你的代碼需要生活在一個對象:通行證依賴於作爲參數。但是,這只是將問題推遲給調用者。

def myMethod(wsClient: WSClient) = // foo 

如果youre有,你有對象,需要注入依賴的遺留應用程序的工作,我想以「提高」的情況,並作出步入正確的方向的一種方式是提供訪問注入類像這樣:

object MyObject { 
    private def instance = Play.current.injector.instanceOf[MyObject] 
    def myMethod(param: String): String = 
    instance.myMethod(param) 
} 

class MyObject @Inject() (wsClient: WSClient) { 
    def myMethod(param: String): String = 
    // foo 
} 

這允許遺留代碼通過對象訪問方法,而新代碼可以注入依賴關係。您也可以將對象上的方法註釋爲已棄用,以便用戶知道。