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