服务提供者

未匹配的标注

简介

服务提供者是整个框架引导中心,服务提供者分两个服务组成;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 提供 mysqlmysql 提供 *gorm.DB

type Controller struct {
    db *gorm.DB `inject:"database, default"`
}

项目地址 通用工具

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~