Service Providers
Organize service registration with the provider pattern.
Service providers are the central place to configure and register services. Each provider implements the Provider interface with Register() and Boot() methods.
Provider Interface
type Provider interface {
Register(c *container.Container) // Bind services
Boot(c *container.Container) // Resolve and configure
}
Lifecycle
- Register phase — All providers'
Register()methods are called. Only bind services here; don't resolve other services yet. - Boot phase — All providers'
Boot()methods are called. Now you can safely resolve other services from the container.
Example Provider
package providers
import (
"github.com/RAiWorks/RapidGo/v2/core/container"
"github.com/RAiWorks/RapidGo/v2/core/mail"
)
type MailProvider struct{}
func (p *MailProvider) Register(c *container.Container) {
c.Singleton("mailer", func(c *container.Container) interface{} {
return mail.NewMailer()
})
}
func (p *MailProvider) Boot(c *container.Container) {
// Nothing to boot
}
Registering Providers
In cmd/main.go:
cli.SetBootstrap(func(a *app.App, mode service.Mode) {
a.Register(&providers.ConfigProvider{})
a.Register(&providers.LoggerProvider{})
a.Register(&providers.DatabaseProvider{})
a.Register(&providers.SessionProvider{})
a.Register(&providers.RouterProvider{Mode: mode})
})
Starter Kit Providers
The starter ships with these providers:
| Provider | Purpose |
|---|---|
ConfigProvider |
Loads .env and registers config |
LoggerProvider |
Configures structured logging |
DatabaseProvider |
Connects to the database via GORM |
RedisProvider |
Connects to Redis |
QueueProvider |
Sets up the job queue dispatcher |
SessionProvider |
Configures session management |
MiddlewareProvider |
Registers middleware aliases and groups |
RouterProvider |
Creates the router, loads templates, serves static files |