to options mode

This commit is contained in:
yanghao05
2023-04-27 18:30:39 +08:00
parent 8ae3d19aa9
commit 574736a878
20 changed files with 180 additions and 50 deletions

62
providers/options.go Normal file
View File

@@ -0,0 +1,62 @@
package providers
import (
"github.com/spf13/viper"
"go.uber.org/dig"
)
type Options struct {
Config *viper.Viper
ConfigPrefix string
Name string
Group string
}
type Option func(o *Options)
func New(opts ...Option) *Options {
o := &Options{}
for _, opt := range opts {
opt(o)
}
return o
}
func (o *Options) UnmarshalConfig(config interface{}) error {
return o.Config.UnmarshalKey(o.ConfigPrefix, &config)
}
func (o *Options) DiOptions() []dig.ProvideOption {
options := []dig.ProvideOption{}
if o.Name != "" {
options = append(options, dig.Name(o.Name))
}
if o.Group != "" {
options = append(options, dig.Group(o.Group))
}
return options
}
func WithConfig(config *viper.Viper) Option {
return func(o *Options) {
o.Config = config
}
}
func WithName(name string) Option {
return func(o *Options) {
o.Name = name
}
}
func WithGroup(group string) Option {
return func(o *Options) {
o.Group = group
}
}
func WithConfigPrefix(prefix string) Option {
return func(o *Options) {
o.ConfigPrefix = prefix
}
}