Package loading
Package loading groups multiple service registrations.
Registration
The services can be assembled into a package, and then, exported all at once.
// pkg/stores/package.go
var Package = do.Package(
    do.Lazy(NewPostgresqlConnectionService),
    do.Lazy(NewUserRepository),
    do.Lazy(NewArticleRepository),
    do.EagerNamed("repository.logger", slog.New(slog.NewTextHandler(os.Stdout, nil))),
)
// cmd/main.go
import (
    "example/pkg/stores"
    "example/pkg/handlers"
)
func main() {
    injector := do.New(stores.Package)
    // ...
    // optional scope:
    scope := injector.Scope("handlers", handlers.Package)
    // ...
}
The traditional vocab can be translated for service registration:
- Provide[T](Injector)->- Lazy(T)
- ProvideNamed[T](Injector, string)->- LazyNamed(string, T)
- ProvideValue(Injector, T)->- Eager(T)
- ProvideNamedValue[T](Injector, string, T)->- EagerNamed(string, T)
- ProvideTransient[T](Injector)->- Transient(T)
- ProvideNamedTransient[T](Injector, string)->- TransientNamed(string, T)
- As[Initial, Alias](Injector)->- Bind[Initial, Alias]()
- AsNamed[Initial, Alias](Injector, string, string)->- BindNamed[Initial, Alias](string, string)