2017-09-01 30 views
0

在玩的Scala 2.5應用程序,我定義我的控制器喜歡 -我們如何可以調用從其它控制器功能於一身的遊戲控制器階

class Application @Inject() (ws:WSClient) extends Controller{ 

現在,我想打電話給另一個控制器類 - ConfigReader的功能readConfig() 有沒有辦法做到這一點,如果我沒有使用服務的這種特殊的使用情況在控制器中共享功能?

在播放2.4,控制器作爲對象,我可以很容易地與Appliation.readConfig()做到這一點。我們怎樣才能用控制器作爲類來做到這一點?

+4

如果你發現自己想調用另一個控制器,你可能想質疑你的架構:控制器不應該包含邏輯。你可能會更好地創建一個額外的類(這不是一個控制器)與共享邏輯,你可以在兩個控制器中使用。其中的好處是:測試,你可以做一些結果(如果你從控制器調用控制器,結果將是一個'Result') – rethab

+0

@rethab謝謝, – user189107

+0

@rethab,現在,我做了一個單獨的服務包含一個包含要由控制器共享的函數的類(DataOperations)。函數readConfig()在此需要使用play的classLoader讀取json文件。我應該使用DataOperations作爲類還是將其聲明爲對象?假設此函數需要Environment對象獲取當前應用程序上下文。您能否就我如何在應用程序控制器中調用DataOperations的函數建議我一個有效的方法? – user189107

回答

-1

只需注入控制器實例:

如果您有:

class ConfigReader @Inject() (ws:WSClient) extends Controller { 
    def readConfig() = ??? 
} 

你應該能夠把它注入到其他控制器:

class Application @Inject() (ws:WSClient, configReader: controllers.ConfigReader) extends Controller { 
    def get() = Action { 
    configReader.readConfig() 
    } 
} 
相關問題