Files
atom/container/container.go
yanghao05 d28d9649ed add close
2023-06-01 11:02:10 +08:00

58 lines
1.0 KiB
Go

package container
import (
"context"
"log"
"github.com/rogeecn/atom/utils/opt"
"github.com/spf13/viper"
"go.uber.org/dig"
)
var Container *dig.Container = dig.New()
var Cancel context.CancelFunc
var closeable []func()
func init() {
if err := Container.Provide(func() context.Context {
ctx, cancel := context.WithCancel(context.Background())
Cancel = cancel
return ctx
}); err != nil {
log.Fatal(err)
}
closeable = make([]func(), 0)
}
func AddCloseAble(c func()) {
closeable = append(closeable, c)
}
func Close() {
for _, c := range closeable {
c()
}
}
type ProviderContainer struct {
Provider func(...opt.Option) error
Options []opt.Option
}
type Providers []ProviderContainer
func (p Providers) With(pcs Providers) Providers {
return append(p, pcs...)
}
func (p Providers) Provide(config *viper.Viper) error {
for _, provider := range p {
provider.Options = append(provider.Options, opt.Config(config))
if err := provider.Provider(provider.Options...); err != nil {
return err
}
}
return nil
}