Add usage example for the service container
This commit is contained in:
parent
100cf83917
commit
bd676c234f
@ -1,3 +1,7 @@
|
|||||||
|
// Package service -
|
||||||
|
// Propose une implémentation
|
||||||
|
// simple d'un conteneur de service afin de permettre
|
||||||
|
// l'injection de dépendances dans les applications web
|
||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
62
service/container_test.go
Normal file
62
service/container_test.go
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// On déclare le nom de notre nouveau service
|
||||||
|
const MyServiceName Name = "myService"
|
||||||
|
|
||||||
|
// On déclare le type de notre nouveau service
|
||||||
|
type MyService struct{}
|
||||||
|
|
||||||
|
// Une simple méthode exposée sur notre service
|
||||||
|
func (s *MyService) HelloWorld() {
|
||||||
|
fmt.Println("Hello World !")
|
||||||
|
}
|
||||||
|
|
||||||
|
func Example_usage() {
|
||||||
|
|
||||||
|
// On initialise un conteneur de services vide
|
||||||
|
container := NewContainer()
|
||||||
|
|
||||||
|
// On créait un "fournisseur" pour notre nouveau service.
|
||||||
|
// Celui ci sera utilisé pour créer une nouvelle instance du service
|
||||||
|
// à chaque fois qu'un appel à container.Service(MyServiceName)
|
||||||
|
// sera fait
|
||||||
|
myServiceProvider := func(container *Container) (interface{}, error) {
|
||||||
|
// On peut potentiellement appeler d'autres services ici
|
||||||
|
// via le conteneur afin d'initialiser notre propre service
|
||||||
|
return &MyService{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// On expose le fournisseur de service dans notre conteneur de service
|
||||||
|
// Cette opération est typiquement faite lors de l'initialisation de
|
||||||
|
// l'application, avant le lancement du serveur HTTP
|
||||||
|
container.Provide(MyServiceName, myServiceProvider)
|
||||||
|
|
||||||
|
// Plus tard, on peut utiliser le conteneur pour récupérer une instance
|
||||||
|
// de notre service
|
||||||
|
service, err := container.Service(MyServiceName)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Le service est retourné en tant que interface{}, il faut utiliser
|
||||||
|
// de l'assertion de type afin de pouvoir l'utiliser concrètement.
|
||||||
|
|
||||||
|
// Les packages de services proposés dans goweb exposent tous les méthodes
|
||||||
|
// From(container *service.Container) (Service, error)
|
||||||
|
// et Must(container *service.Container) Service qui permettent de simplifier
|
||||||
|
// ce processus.
|
||||||
|
|
||||||
|
myService, ok := service.(*MyService)
|
||||||
|
if !ok {
|
||||||
|
panic(errors.New("unexpected implementation"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// On peut maintenant utiliser le service
|
||||||
|
myService.HelloWorld()
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user