0

這不是一個阻塞問題,但我想了解如何更好地處理控制器注入。依賴注入控制器@

Play document about Routing in 2.4,據說:

播放支持產生兩個類型的路由器,一個是一個依賴注入路由器,另一種是靜態路由器。默認值是靜態路由,但是,如果您使用的播放種子激活模板的新的Play應用程序,你的項目將包括在build.sbt以下配置告訴它使用的注射路由器:

routesGenerator:= InjectedRoutesGenerator

Play的文檔中的代碼示例假定您正在使用注入的路由生成器。如果你沒有使用它,你可以簡單地調整靜態路由生成器的代碼樣本,可以通過在@符號前加上路由器的控制器調用部分,或者將每個控制器聲明爲對象而不是類。

所以,我的理解,在build.sbtroutesGenerator := InjectedRoutesGenerator,如果我用控制器調用@前綴,它是一樣的製作控制器作爲一個單身object。這違背了我已經宣佈我的控制器爲class的事實,它有一些注入(使用@Inject),並且我用@作爲我的所有控制器調用的前綴,以便IntelliJ不報告錯誤。

那麼,@真的做我的控制器調用?

回答

2

@StaticRoutesGenerator的選項,它與Injected之一無關。

當你遵循InjectedRoutesGenerator推薦的方式,你的控制器必須是一個類,其中的依賴將被注入(如果您自動運行DI,或者手動使用,如果你使用的編譯時DI)。在路由文件中,您只需引用該類,而不需要@

如果您選擇StaticRoutesGenerator,則路由器將遵循與Play 2.3及更低版本相同的行爲。控制器是默認的對象,您可以添加一個@來引用一個類。

我希望這能解決您的疑慮。

+0

截至目前我所擁有的是我的控制器作爲類,注入組件。我也在build.sbt中啓用了InjectedRoutesGenerator。在我的路由文件中,我有'@'前綴。當我打破它時,這仍然是行得通的。所以我想知道我目前的設置,如果我的控制器注入。 – Khanetor

+0

什麼是刪除'@'?我認爲他們被InjectedRoutesGenerators忽略。而且很容易知道你的控制器是否被注入,只是嘗試用一個路由來呼叫它們。如果有效,它們會被注入。 –

+0

你是什麼意思「你刪除了@?」 – Khanetor