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}