在 go 框架中自定依赖注入器皿,方法如下:定义接口与服务构造并实现依赖注入。建立 di 器皿构造,其中包括注册依赖项的投射。应用 register 方式注册依赖项插口及与完成。应用 resolve 方式分析注册的依赖项。
在 Go 框架中自定依赖注入器皿
依赖注入 (DI) 器皿是一个轻量库,负责将依赖项注入到类案例 中。自定 DI 器皿可提供更高控制力和灵活性。
流程:
定义接口:界定服务的接口,以便于依赖注入。
typeGreetServiceinterface{
Greet(namestring)string
}
创建服务:实现接口并创建服务构造。
typeGreetServiceImplstruct{}
func(sGreetServiceImpl)Greet(namestring)string{
returnfmt.Sprintf("Hello,%s!",name)
}
界定引入器皿:创建一个结构体来描述 DI 器皿。
typeContainerstruct{
bindingsmap[reflect.Type]reflect.Value
}
注册依赖项:应用 Register 方法将依赖项插口注册到容器里。
func(cContainer)Register(keyinterface{},implinterface{}){
k:=reflect.TypeOf(key)
i:=reflect.ValueOf(impl)
c.bindings[k]=i
}
分析依赖项:应用 Resolve 方式分析注册的依赖项。
func(cContainer)Resolve(keyinterface{})interface{}{
k:=reflect.TypeOf(key)
returnc.bindings[k].Interface()
}
实战案例 :
packagemain
import(
"fmt"
"reflect"
)
typeGreetServiceinterface{
Greet(namestring)string
}
typeGreetServiceImplstruct{}
func(sGreetServiceImpl)Greet(namestring)string{
returnfmt.Sprintf("Hello,%s!",name)
}
typeContainerstruct{
bindingsmap[reflect.Type]reflect.Value
}
func(cContainer)Register(keyinterface{},implinterface{}){
k:=reflect.TypeOf(key)
i:=reflect.ValueOf(impl)
c.bindings[k]=i
}
func(cContainer)Resolve(keyinterface{})interface{}{
k:=reflect.TypeOf(key)
returnc.bindings[k].Interface()
}
funcmain(){
c:=Container{}
c.Register(new(GreetService),&GreetServiceImpl{})
greetService:=c.Resolve(new(GreetService)).(GreetService)
fmt.Println(greetService.Greet("John"))
}
以上就是golang框架中怎样自定依赖注入器皿的详细内容,大量请关注其他类似文章!