[platform-play] TwirlCompiler support for dependency injection with templates
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- scala
- Ambito
- build-system
Direzione di ricerca
Inizia dal punto di ingresso di TwirlCompiler e dalla configurazione sourceSets suggerita in build.gradle, usando come comportamento di riferimento l'esempio collegato di dependency injection per Scala templates. La classe template generata dovrebbe accettare dipendenze del costruttore e avere l'annotazione configurata @javax.inject.Inject(), consentendo ai controller di iniettarla e invocarla come mostrato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Twirl templates can be generated as a class rather than a static object by declaring a constructor using a special @this(args) syntax at the top of the template. This means that Twirl templates can be injected into controllers directly and can manage their own dependencies, rather than the controller having to manage dependencies not only for itself, but also for the templates it has to render.
Reference: https://www.playframework.com/documentation/2.6.x/ScalaTemplatesDependencyInjection
Expected Behavior
Using the examples in reference site:
trait Summarizer {
/** Provide short form of string if over a certain length */
def summarize(item: String)
}
Template:
@this(summarizer: Summarizer)
@(item: String)
@{summarizer.summarize(item)}
Controller:
class MyController @Inject()(template: views.html.IndexTemplate,
cc: ControllerComponents)
extends AbstractController(cc) {
def index = Action { implicit request =>
val item = \"some extremely long text\"
Ok(template(item))
}
}
The generated class should be:
class IndexTemplate @javax.inject.Inject() /*2.18*/(summarizer: models.Summarizer) extends _root_.play.twirl.api.BaseScalaTemplate[play.twirl.api.HtmlFormat.Appendable,_root_.play.twirl.api.Format[play.twirl.api.HtmlFormat.Appendable]](play.twirl.api.HtmlFormat) with _root_.play.twirl.api.Template1[String,play.twirl.api.HtmlFormat.Appendable] {
/**/
def apply/*3.14*/(item: String):play.twirl.api.HtmlFormat.Appendable = {
_display_ {
{
Seq[Any](format.raw/*3.28*/("""
"""),_display_(/*5.14*/{summarizer.summarize(item)}),format.raw/*5.42*/("""
"""))
}
}
}
def render(item:String): play.twirl.api.HtmlFormat.Appendable = apply(item)
def f:((String) => play.twirl.api.HtmlFormat.Appendable) = (item) => apply(item)
def ref: this.type = this
}
So the class generated is annotated with @Inject class IndexTemplate @javax.inject.Inject() /*2.18*/(summarizer: models.Summarizer)
Current Behavior
The current version of gradle-plataform-play does not support dependency injection.
Suggestions
Configuration
- build.gradle
sourceSets {
main {
twirl{
constructorAnnotations = [ '@javax.inject.Inject()']
}
}
}
- Lingua principale
- Java
- Stelle
- 47
- Fork
- 42
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di gradle/playframework
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
gradle/playframework#218 ·
-
Support for Play 2.9 & 3.0 ?Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
gradle/playframework#185 · 2 commenti ·
-
Configuration cache compatibilityForse già presa @Nouran-11 l’ha presa 476 giorni fa. Apertabug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
gradle/playframework#184 · 2 commenti ·
-
How do I specify ECMASCRIPT6 as a --language_in parameter in the JavaScriptMinifyWorkAction task?Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
gradle/playframework#181 ·
-
ToolChainAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
gradle/playframework#178 ·
Tutte le issue di gradle/playframework
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
OpenAPITools/openapi-generator#25454 ·
I maintainer di solito rispondono entro 1 giorno
-
Component - Build
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
navikt/mock-oauth2-server#1149 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
oracle/graalvm-reachability-metadata#11318 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
Stirling-Tools/Stirling-PDF#8709 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno