2015-07-11 89 views
7

我想玩斯達拉2.4.2,我不清楚控制器應該定義爲類還是單身。該文檔的狀態:斯卡拉播放框架 - 控制器作爲類或單身

A Controller is nothing more than a singleton object that generates Action values.

然而,代碼示例顯示:

class Application extends Controller { ... } 

更復雜的是,的IntelliJ給我一個警告,如果我定義一個類:

intellij warning

然而如果我使用單例,我收到一個編譯錯誤(但沒有警告):

package controllers 

import play.api._ 
import play.api.mvc._ 

object Application extends Controller { ... } 

Error:(6, -1) Play 2 Compiler: /Users/Toby/IdeaProjects/play-scala/conf/routes:6: type Application is not a member of package controllers

哪種方法是正確的?

+0

首先檢查控制器處於所需的軟件包,然後要麼把它定義爲單例'對象應用程序擴展Controller',或者如果需要依賴注入類。 – cchantep

回答

10

如果您使用靜態路由器,則您的控制器應該是對象。靜態是Play 2.4中的默認路由器,與Play 2.3和之前的版本具有相同的行爲。

如果您使用Play 2.4中新增的注入路由器,則可以將控制器轉換爲類。您需要啓用注入路由器在build.sbt

routesGenerator := InjectedRoutesGenerator 

更新:注入的路由器,現在是在遊戲默認的2.5

+0

謝謝,我注意到我的sbt包含routesGenerator:= InjectedRoutesGenerator,這很奇怪,因爲我沒有添加它,我認爲默認是舊的靜態方法。這可以解釋爲什麼我的類可以工作,但單身人士不會 –

+0

他們建議使用注入路由器。如果從模板生成新項目,可能會出現這種情況 – dwickern

+0

對於IDEA代碼輔助/內聯編譯錯誤,請參閱問題https://youtrack.jetbrains.com/issue/SCL-8812 –