服务提供者
简介
服务提供者是整个框架引导中心,服务提供者分两个服务组成;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"`
}
推荐文章: