2015-05-22 16 views
7

Sto usando Play 2.4. Mi piacerebbe sostituire il router predefinito, con la mia classe, usando la nuova funzione di riproduzione dinamica delle dipendenze. Quali sono i passaggi per farlo?Custom Router in Playframework 2.4

risposta

3

Una possibile soluzione potrebbe essere quella di creare un nuovo modulo Guice, per vincolare il proprio nuovo router:

class RouterModule extends AbstractModule { 

    override def configure(): Unit = { 
    bind(classOf[Router]).to(classOf[CustomRouter]) 
    } 
} 

quindi definire una nuova Application Loader, che ignorare il router di default configurato, utilizzando il modulo appena creato :

class MyApplicationLoader extends GuiceApplicationLoader with GuiceableModuleConversions { 

    override protected def overrides(context: Context): Seq[GuiceableModule] = { 
    Seq(fromGuiceModule(new RouterModule)) ++ super.overrides(context) 
    } 
} 

e utilizzare il caricatore applicazioni appena creato, al posto di quella di default, in application.conf:

play.application.loader = "de.zalando.store.pdp.modules.MyApplicationLoader" 
+0

Per https://www.playframework.com/documentation/2.4.x/ScalaRouting: è inoltre necessario aggiungere la seguente dichiarazione nel file sbt :; routesGenerator: = InjectedRoutesGenerator? Puoi indicarmi il documento per sapere come viene effettivamente scritta la rotta personalizzata? Il documento che ho collegato non ce l'ha. – 0fnt

+0

IMHO si può beneficiare di giocare "Componenti" per sostituire le dipendenze iniettate (https://www.playframework.com/documentation/2.4.x/ScalaCompileTimeDependencyInjection). In questo modo devi solo scrivere il nuovo ApplicationLoader, farne riferimento in application.conf. Non c'è bisogno di scrivere il modulo guice. Stessa cosa se vuoi sostituire MessageApi – iwalktheline