RapidGo
No results found

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

  1. Register phase — All providers' Register() methods are called. Only bind services here; don't resolve other services yet.
  2. 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