Wire
要求
在main包下,创建wire.go
在内部随便建立func方法,内部要包含wire.Build()
里面为对应的构造器函数。可以通过wire.Newset()
将多个Provider函数串联一起(之间不一定有关系),然后触发wire.Build调用。如果有全局要使用的对象,可以使用wire.Value
定义(仅针对对象)。且这种对象需要通过指针传递,否则要么提示找不到,要么提示重复了。
wire.go
type AppInfo struct{
}
func myWire(test *Test){
appInfo := &AppInfo{}
wire.Build(ServiceProvider, NewConfigService,wire.value(appInfo))
}
main.go
// 在需要初始化执行时,触发此方法装载。即wire仅是帮你生成了依赖关系的代码,还需要自己调用。
对于方法中的入参项,会在对象构建时,自动填入
myWire(&test)
service.go
ServiceProvider := wire.NewSet(NewUserService)
注意事项
wire对象的地址引用
如果方法中引入的是一般的构造器使用比较随意,如果是对象要使用指针指向
,否则要么没有,要么说是多个类型。
执行
当执行wire
后,成功时会生成wire_gen.go文件。
windows用户,需要在git的工具中执行,windows自有控制台不可以执行会报错