2015-10-12 47 views
1

我想創建一個LinkedinApi類,其中包含對Linkedin服務器執行Web服務請求的函數。這些功能需要在Play應用代碼中的任何地方訪問。我過去編寫這樣的API類最簡單的方法是讓它們聲明爲object。然後LinkedinApi.myPublicFunction()可從任何地方。如何創建在Play 2.4中執行Web服務調用的應用程序範圍的Scala函數?

問題是,我不明白我怎麼可以將我的LinkedinApi類聲明爲object。它會使用Play 2.4的網絡服務,這是通過將@Inject()(ws: WSClient)添加到類聲明中完成的。像object LinkedinApi @Inject()(ws: WSClient) extends Controller

問題是上面的代碼不能編譯。看來@Inject只能與class聲明一起使用,而不能與object一起使用。

那麼如何創建執行Web服務調用的應用程序範圍的API函數?

+0

你爲什麼不創建LinkedinApi作爲一個單獨的服務,並注入它在哪裏你想要? – Nyavro

+0

@nyavro這很可能是解決方案。我從來沒有使用過單身,或者爲此注入過單身。你想詳細說明如何在答案中做到這一點? – Blackbird

回答

3

我想你應該定義你的LinkedinApi作爲一種服務,並注入它需要的地方:

@Singleton 
class LinkedinApi @Inject()(ws: WSClient) { 
    //... 
    //linkedin stuff 
    //... 
} 

和注入:

@Singleton 
class SomeController @Inject()(linkedinApi:LinkedinApi) { 
    //... 
} 
相關問題