2015-07-11 12 views
7

ben Scala için Çal 2.4.2 çalışıyorum olarak kontrolör ve kontrolörleri sınıflar veya tekil olarak tanımlanması gerektiğini olup olmadığı açık değilim. docs durumu:Scala Framework oyna - sınıf veya tekil

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

Ancak kod örneği gösterir:

class Application extends Controller { ... } 
Ben bir sınıf tanımlarsanız

ayrıca şeyleri zorlaştırmak için , intellij bana bir uyarı verir: Ancak

intellij warning

Tek bir satır kullanırsam bir derleme hatası alıyorum (ancak uyarı yok):

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

Hangi yaklaşım doğrudur? Statik yönlendirici kullanırsanız

+0

İlk kontrolör sonra, gerekli pakette ya olarak tanımlamak kontrol Singleton 'nesnesi Uygulama Denetleyiciyi genişletir veya Bağımlılık Enjeksiyonuna ihtiyacınız varsa sınıf olarak. – cchantep

cevap

10

Kişisel denetleyicileri nesneleri olmalıdır. Statik, Play 2.4'teki varsayılan yönlendiricidir ve aynı davranışı Play 2.3 ve öncesi ile aynıdır.

İnfüze edilmiş yönlendiriciyi Play 2.4'te yeni kullanıyorsanız, denetleyicilerinizi sınıflara dönüştürebilirsiniz. Eğer build.sbt enjekte yönlendirici etkinleştirmeniz gerekir:

routesGenerator := InjectedRoutesGenerator 

Güncelleme: enjekte yönlendirici şimdi Play varsayılan 2.5

+0

Teşekkürler, benim sbt includeGenerator içerdiğini fark ettim: = Enjekte edilenRoutesGenerator çünkü ben eklemedim ve varsayılan eski statik yaklaşım olduğunu düşündüm. Bu, derslerimin neden çalıştığını açıklıyor ancak singleton, –

+0

'u enjekte ediyor. Enjekte edilen yönlendiriciyi kullanmanızı öneriyorlar. Şablondan – dwickern

+0

yeni bir proje oluşturursanız elde edeceğiniz şey muhtemelen budur. IDEA kod yardımı/satır içi derleme hatası için https://youtrack.jetbrains.com/issue/SCL-8812 konusuna bakın. –