以下是wire注入的依赖
wire这个工具可以根据wire.build具体返回的对象,对对象的所有依赖进行实例化,无关乎实例化方法的顺序
例如
main.go
package main
type A struct {
}
func NewA()*A{
return &A{}
}
type B struct {
}
func NewB()*B{
return &B{}
}
type C struct {
}
func NewC()*C{
return &C{}
}
type D struct {
a *A
B *B
c *C
}
func NewD(a *A,b *B,c *C){
return D{
a:a,b:b,c:c
}
}
var aSet = wire.NewSet(NewA)
var bSet = wire.NewSet(NewA)
var cSet = wire.NewSet(NewA)
func main(){
InitD()
}
wire.go
package main
function InitD()*D{
wire.build(aSet ,bSet,cSet,NewD)
return nil
}
注意 上述每一个方法的都能找到对应的依赖值 比如aSet返回的是*A,bSet返回的是*B,cSet同理,他们都给NewD提供了参数,所以NewD能够正常运行注入,以至于能给InitD返回注入对象*D 通过*D在我们框架内就是框架的main主协程变量,在整个main的生命周期内都有效,一半用作框架的实例变量