[platform-play] TwirlCompiler support for dependency injection with templates
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- scala
- Área
- build-system
Línea de trabajo
Comienza con el punto de entrada de TwirlCompiler y la configuración sugerida de sourceSets en build.gradle, utilizando como comportamiento de referencia el ejemplo vinculado de inyección de dependencias de Scala templates. La clase de template generada debe aceptar dependencias del constructor y llevar la anotación configurada @javax.inject.Inject(), permitiendo que los controladores la inyecten y la invoquen como se muestra.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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()']
}
}
}
- Lenguaje dominante
- Java
- Estrellas
- 47
- Forks
- 42
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de gradle/playframework
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
gradle/playframework#218 ·
-
Support for Play 2.9 & 3.0 ?Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
gradle/playframework#185 · 2 comentarios ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
gradle/playframework#184 · 2 comentarios ·
-
How do I specify ECMASCRIPT6 as a --language_in parameter in the JavaScriptMinifyWorkAction task?Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
gradle/playframework#181 ·
-
ToolChainAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
gradle/playframework#178 ·
Todos los issues de gradle/playframework
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
bisq-network/bisq#8097 ·
Los mantenedores suelen responder en 1 día
-
area/frontend good first issue kind/cooldown
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
apache/datasketches-java#773 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
cpinitiative/usaco-guide#6665 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
trinodb/trino-gateway#1301 ·
Los mantenedores suelen responder en 1 día