服务提供者
简介
服务提供者是整个框架引导中心,服务提供者分两个服务组成;1服务本身,2提供者。服务由提供者构建和提供具体服务,提供者可以通过多种服务。
服务
服务可以任何代码,哪怕是int都可以成为一个服务。当然一般服务以struct为载体。例如数据库gorm.DB也是一个服务。
提供者
服务提供者原理是可以提供任何东西,这里定义只要实现 func GetBean(alias string) interface{} 函数,并且拥有@Bean("alias") 注解的struct,那么它就是一个提供者;
现在定义一个可以提供*gorm.DB数据库连接的提供者。
// MysqlProvider @Bean("mysql")
type MysqlProvider struct {
dbs map[string]*gorm.DB
}
func (m *MysqlProvider) Init() {
m.dbs = make(map[string]*gorm.DB)
// todo
}
func (m *MysqlProvider) GetBean(alias string) interface{} {
return m.dbs[alias]
}
执行工具命令
toolset make:bean
会生成go源码,并且把mysql作为MysqlProvider的全局services.Container保存标识,只要注册后,就可以在任意地方根据使用
在启动程序时赋值
获取一个 default 的数据库连接,当然啦,必须得在m.dbs[alias]有key存在。
type Controller struct {
db *gorm.DB `inject:"mysql, default"`
}
在启动程序后手动获取
// db := providers.NewMysqlProvider().GetBean("default").(*gorm.DB)
db := providers.GetBean("mysql").(providers.Bean).GetBean("default").(*gorm.DB)
还可以套娃
database 提供 mysql,mysql 提供 *gorm.DB
type Controller struct {
db *gorm.DB `inject:"database, default"`
}
GO 全栈框架封装
关于 LearnKu
推荐文章: