【资料图】
golang依赖注入工具digo工具地址:https://github.com/werbenhu/digo
特性使用注释中的注解自动代码生成自动检测循环依赖编译时期依赖注入自动初始化支持实例组的管理快速开始更多示例请参考:examples
编写代码和注解package mainimport ("log""github.com/werbenhu/digo")// @provider({"id":"main.db.url"})func NewDbUrl() string {return "localhost:3306"}type Db struct {url string}// @provider({"id":"main.db"})// @inject({"param":"url", "id":"main.db.url"})func NewDb(url string) *Db {return &Db{url: url,}}type App struct {Db *Db}// @provider({"id":"main.app"})// @inject({"param":"db", "id":"main.db"})func NewApp(db *Db) *App {return &App{Db: db,}}func (a *App) Start() {log.Printf("app strat, db:%s\n", a.Db.url)}func main() {app, err := digo.Provide("main.app")if err == nil {app.(*App).Start()}}
安装digogen工具go install github.com/werbenhu/digo/digogen@v1.0.0
生成依赖注入代码打开命令行执行下面命令,digogen
将会根据注解自动生成digo.generated.go
源码文件.
digogen
运行代码go run .\digo.generated.go .\main.go
@provider注解表示是一个实例提供者,该实例是一个单例
示例// @provider({"id":"main.db"})
支持的参数:参数 | 类型 | 是否必需 | 说明 |
---|---|---|---|
id | string | 是 | 实例的id |
如果获取实例,通过digo.Provide(providerId)
可以获取到某一个provider的实例
app, err := digo.Provide("main.app")if err == nil {app.(*App).Start()}
@inject@inject注解表示注入一个实例到某个参数, @inject注解必须和@provider或者@group二者中的一个同时存在.
示例// @inject({"param":"db", "id":"main.db"})
支持的参数:参数 | 类型 | 是否必需 | 说明 |
---|---|---|---|
param | string | 是 | 指明哪个参数需要注入实例 |
id | string | 是 | 指明需要注入的实例id |
pkg | string | 否 | 该参数需要引入特定的包 |
pkg在什么时候需要使用,比如我们需要引入一个包 github.com/xxx/tool/v1
, 我们使用包名的时候是这样使用的 *tool.Struct, 而不是 *v1.Struct,那我们需要显示指明需要导入github.com/xxx/tool/v1
包
// @inject({"param":"tool", "id":"main.tool", "pkg":"github.com/xxx/tool/v1"})
@group@group注解表示将实例注册到一个组
示例// @group({"id":"main.controllers"})
支持的参数:参数 | 类型 | 是否必需 | 说明 |
---|---|---|---|
id | string | 是 | 组的id |
如果获取组的所有实例,通过digo.Members(groupId)
可以获取到组的所有实例
ctrls, err := digo.Members("main.controllers")if err == nil { for _, controller := range ctrls { // TODO: }}
上一篇:每日快播:姚劲波卸任天鹅到家法定代表人 由陈小华接任
下一篇:最后一页
办理境外投资许可证需要哪些手续?1、省内各类企业如到已建交国家投资办企业,可直接向各地级市外经贸局申
2023台北国际电脑展(Computex2023)已经正式拉开帷幕,展会聚集了来自26个国家和地区的超过1000个厂商参展
大家好,今日关于【女子称逛街被陌生男子直播造黄谣】的话题登上了各大平台的热搜榜,受到全网的关注度非常
每日小编都会为大家带来一些知识类的文章,那么为大家带来的是欧冠历届冠冠军名单方面的消息知识,那么如果
此前,俄罗斯多次强调,乌克兰加入北约是俄罗斯的“红线”
X 关闭
X 关闭
国内首个“云保险鱼塘”长啥样?近日,记者实地进行了探访。在广东省肇庆市四会市国斌水产养殖合作社,记者见到了合作社带头人马国斌。刚刚[+更多]
背景介绍作为应用最广泛的包装用品之一,纸箱承担着容装、保护产品、美观的重要责任。其市场需求也随着国内消费、物流运输及出口包装行业的[+更多]
【资料图】ABB高压电机有限公司研发中心作为ABB电机业务全球研发的重要组成部分,从建成伊始起,就始终致力于“在中国,为中国和世界”作为[+更多]
近日,深圳市国家级专精特新"小巨人"企业名单公布,正弦电气成功入选国家级专精特新"小巨人"企业名单。S I N E E专精特新“小巨人”专[+更多]