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
7
A
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"
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
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