2018-12-07 09:57:19 +01:00
|
|
|
package goweb
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
|
2018-12-07 10:13:53 +01:00
|
|
|
containerMiddleware "forge.cadoles.com/wpetit/goweb/middleware/container"
|
2018-12-07 09:57:19 +01:00
|
|
|
"forge.cadoles.com/wpetit/goweb/service"
|
|
|
|
"forge.cadoles.com/wpetit/goweb/service/template"
|
|
|
|
"forge.cadoles.com/wpetit/goweb/template/html"
|
|
|
|
"github.com/go-chi/chi"
|
|
|
|
)
|
|
|
|
|
|
|
|
func Example_usage() {
|
|
|
|
|
|
|
|
// Exemple d'utilisation de la librairie "goweb" pour la mise en place
|
|
|
|
// d'une application web avec injection de dépendances - ici un moteur de templates.
|
|
|
|
|
|
|
|
// On créait un conteneur de service vide
|
|
|
|
container := service.NewContainer()
|
|
|
|
|
|
|
|
// On expose le service "template" avec l'implémentation
|
|
|
|
// basée sur le moteur de rendu HTML de la librairie standard
|
|
|
|
container.Provide(template.ServiceName, html.ServiceProvider("./templates"))
|
|
|
|
|
|
|
|
router := chi.NewRouter()
|
|
|
|
|
|
|
|
// On utilise le middleware "ServiceContainer" pour exposer
|
|
|
|
// le conteneur de service dans nos requêtes
|
2018-12-07 10:13:53 +01:00
|
|
|
router.Use(containerMiddleware.ServiceContainer(container))
|
2018-12-07 09:57:19 +01:00
|
|
|
|
|
|
|
// On créait un handler pour la page d'accueil
|
|
|
|
router.Get("/", ServeHomePage)
|
|
|
|
|
|
|
|
if err := http.ListenAndServe(":3000", router); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func ServeHomePage(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
2018-12-07 10:13:53 +01:00
|
|
|
// On récupère le conteneur de services depuis le contexte de la requête
|
|
|
|
container := containerMiddleware.Must(r.Context())
|
2018-12-07 09:57:19 +01:00
|
|
|
|
|
|
|
// On récupère le service "template" depuis le conteneur de service
|
|
|
|
templateService := template.Must(container)
|
|
|
|
|
2018-12-07 10:13:53 +01:00
|
|
|
// On utilise notre service de template
|
2018-12-07 09:57:19 +01:00
|
|
|
if err := templateService.RenderPage(w, "my-template.html.tmpl", nil); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|