Golang 依赖注入的老套路新封装
每一个模块,都有测试用例,可以通过测试用例了解具体的使用方法
log 包
打印 gobean 项目下的包 debug 级别的日志
go get -u github.com/erkesi/gobean/log
方法
初始化全局 Logger 实例
log.Init(logger Logger)
inject 包
依赖注入
go get -u github.com/erkesi/gobean/inject
在依赖关系的顺序下,再按照实例注入的优先级和顺序,完成实例的生命周期的管理
方法
实例的生命周期
type B struct{
}
type A struct{
B *B `inject:""`
}
// Init, 实现 inject.ObjectInit 接口,完成实例的初始化
func (a *A) Init() {
}
// Close, inject.ObjectClose 接口,完成实例的销毁
func (a *A) Close(){
}
按照类型注入实例
- 参数 opts: 可以为 inject.ProvideWithPriority(priority int) , 顺序【依赖关系与优先级(从大到小)】完成实例的初始化
inject.ProvideByValue(value interface{}, opts ...ProvideOptFunc)
依据类型获取实例
inject.ObtainByType(value interface{}) interface{}
按照命名注入实例
- 参数 opts: 可以为 inject.ProvideWithPriority(priority int) , 按照顺序【依赖关系与优先级(从大到小)】完成实例的初始化
inject.ProvideByName(name string, value interface{}, opts ...ProvideOptFunc)
按照命名获取实例
inject.ObtainByName(name string) interface{}
完成依赖注入以及按照顺序【依赖关系与优先级(从大到小)】完成实例的初始化(Init())
inject.Init()
实例初始化的逆向顺序销毁实例(Close())
inject.Close()
按照依赖注入的关系打印实例列表
inject.PrintObjects()
extpt 包
扩展点能力
go get -u github.com/erkesi/gobean/extpt
基于 inject 依赖注入的能力
执行的时候,依据扩展点接口,找到多个实现,按照优先级逐个匹配,如果匹配(Match() == true),则执行后返回。
方法
注册扩展点实例
extpt.Hub.Register(et ExtensionPointer, opts ...ExtPtFunc)
执行
extpt.Execute(f interface{}, args ...interface{}) (interface{}, bool)
extpt.ExecuteWithErr(f interface{}, args ...interface{}) (interface{}, error, bool)
application 包
应用启动与销毁回调函数的注册以及使用
go get -u github.com/erkesi/gobean/application
方法
注册应用启动回调函数
- 参数 opts: 可以为 application.CallbackWithPriority(priority int) , 顺序【优先级(从大到小)】执行 callback
application.AddInitCallback(callback appStateCallback, opts ...OptFunc)
注册应用销毁回调函数
- 参数 opts: 可以为 application.CallbackWithPriority(priority int) , 顺序【优先级(从大到小)】执行 callback
application.AddCloseCallback(callback appStateCallback, opts ...OptFunc)
应用初始化,按照优先级顺序(从大到小)调启动函数
application.Init()
应用销毁,按照优先级顺序(从大到小)调销毁函数
application.Close()