-
Notifications
You must be signed in to change notification settings - Fork 0
/
default_app_builder.go
54 lines (43 loc) · 1.56 KB
/
default_app_builder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package defaultbuilder
import (
di "github.com/AlgerDu/go-di/src"
"github.com/AlgerDu/go-dream/src/dinfra"
extgookit "github.com/AlgerDu/go-dream/src/dinfra/ext-gookit"
extlogrus "github.com/AlgerDu/go-dream/src/dinfra/ext-logrus"
)
type (
// 默认实现的 dinfra.AppBuilder
DefaultAppBuilder struct {
container *di.Container
serviceConfigFuncs []dinfra.ServiceConfigFunc
}
)
func New() *DefaultAppBuilder {
builder := &DefaultAppBuilder{
container: di.New(),
serviceConfigFuncs: []dinfra.ServiceConfigFunc{},
}
return builder
}
func (builder *DefaultAppBuilder) ConfigService(configFuncs ...dinfra.ServiceConfigFunc) *DefaultAppBuilder {
builder.serviceConfigFuncs = append(builder.serviceConfigFuncs, configFuncs...)
return builder
}
func (builder *DefaultAppBuilder) Build() (dinfra.App, error) {
for _, configFunc := range builder.serviceConfigFuncs {
configFunc(builder.container)
}
return di.GetService[dinfra.App](builder.container)
}
// 使用默认的 config ;可以自行注入不同的实现
func (builder *DefaultAppBuilder) UseConfig(options *extgookit.ConfigOptions) *DefaultAppBuilder {
di.AddInstance(builder.container, options)
di.AddSingletonFor[dinfra.Config](builder.container, extgookit.New)
return builder
}
// 使用默认的 logger ;可以自行注入不同的实现
func (builder *DefaultAppBuilder) UseLogger() *DefaultAppBuilder {
dinfra.DI_ConfigOptions(builder.container, "logger", extlogrus.NewDefaultOptions())
di.AddSingletonFor[dinfra.Logger](builder.container, extlogrus.New)
return builder
}