自动的依赖注入尝试
实现一些有趣的想法。
在实现复杂业务项目时,使用依赖注入是基操.
dig
使用闭包函数和注解实现自动注入,但是无法友好错误提示,再加上复杂系统肯定有一两个特殊需求,不用依赖注入流程时。手动 NewStruct 非常不友好,完全不知道底层依赖了多少层.
wire
虽然没有 dig
的弊端,但是依赖定义完全手动,麻烦了一些,但是因为 wire.Build 定义非常简单,完全可以根据 NewStruct 函数自己生成啊
所以实现了一个模版 github.com/go-ex/gin-proto
内置两个工具 proto-gin
、gin-inject
使用 php 解析 proto 文件,生成 gin 的路由信息和基础控制器
make proto-gin
使用 php 解析 go 代码,根据固定命名规则,生成依赖图。
make gin-inject
gin-inject
工具根据传入参数,直接维护对应结构体的提供者函数 + wire 库的 Build 定义
func NewHomeProvider(account *login.Account) *Home {
return &Home{}
}
例如上面代码,函数名符合 New {struceName} Provider 的命名格式;
gin-inject
工具就会解析该函数,直接为参数 login.Account 生成 NewAccountProvider 提供者,同时生成可被依赖提供函数。 这些都是自动,无需关心。
任何地方无脑用就可以了。完全使用 php,laravel 的依赖注入习惯。
推荐文章: