main
1package ioc
2
3import (
4 "github.com/golobby/container/v3"
5 "github.com/xlgmokha/x/pkg/x"
6)
7
8var Default container.Container = container.Global
9
10type Resolver[T any] func() T
11
12func Register[T any](c container.Container, factory Resolver[T]) error {
13 return c.Transient(func() T {
14 return factory()
15 })
16}
17
18func RegisterSingleton[T any](c container.Container, factory Resolver[T]) error {
19 return c.Singleton(func() T {
20 return factory()
21 })
22}
23
24func Resolve[T any](c container.Container) (T, error) {
25 var item T
26 err := c.Call(func(i T) {
27 item = i
28 })
29 return item, err
30}
31
32func MustResolve[T any](c container.Container) T {
33 return x.Must(Resolve[T](c))
34}