63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
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()
|
|
|
|
}
|