Files
mayfly-go/server/pkg/starter/initialize.go

49 lines
1.1 KiB
Go
Raw Normal View History

2026-01-25 14:16:16 +08:00
package starter
2023-12-27 22:59:20 +08:00
import (
2024-01-21 22:52:20 +08:00
"mayfly-go/pkg/ioc"
2023-12-27 22:59:20 +08:00
)
// 初始化ioc函数
type InitIocFunc func()
// 初始化函数
type InitFunc func()
var (
initIocFuncs = make([]InitIocFunc, 0)
initFuncs = make([]InitFunc, 0)
)
2025-04-15 21:42:31 +08:00
// 添加初始化ioc函数由各个模块自行添加(直接init方法中ioc.Register注册不会打印ioc相关日志)
func AddInitIocFunc(initIocFunc InitIocFunc) {
initIocFuncs = append(initIocFuncs, initIocFunc)
}
2025-04-15 21:42:31 +08:00
// 添加初始化函数,由各个模块自行添加
func AddInitFunc(initFunc InitFunc) {
initFuncs = append(initFuncs, initFunc)
}
// 系统启动时,调用各个模块的初始化函数
2026-01-25 14:16:16 +08:00
func initOther() error {
2025-04-23 20:36:32 +08:00
// 调用各个模块ioc组件注册初始化优先调用ioc初始化注册函数和注入函数可能在后续的InitFunc中需要用到依赖实例
for _, initIocFunc := range initIocFuncs {
initIocFunc()
}
initIocFuncs = nil
2024-01-21 22:52:20 +08:00
// 为所有注册的实例注入其依赖的其他组件实例
2026-01-25 14:16:16 +08:00
if err := ioc.InjectComponents(); err != nil {
return err
}
2024-01-21 22:52:20 +08:00
2024-03-02 19:08:19 +08:00
// 调用各个模块的初始化函数
for _, initFunc := range initFuncs {
go initFunc()
}
initFuncs = nil
2026-01-25 14:16:16 +08:00
return nil
}