自动的依赖注入尝试
实现一些有趣的想法。
在实现复杂业务项目时, 使用依赖注入是基操.
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 的依赖注入习惯。
推荐文章: