Go新项目-Gin中wire的依赖注入方式实战
package main
import (
"github.com/google/wire"
)
// 定义依赖项
type GreetingUseCase interface {
Greet(name string) string
}
// 实现依赖项
type greetingUseCase struct{}
func NewGreetingUseCase() GreetingUseCase {
return &greetingUseCase{}
}
func (uc *greetingUseCase) Greet(name string) string {
return "Hello, " + name + "!"
}
// 定义provider函数,用于创建依赖项实例
func ProvideGreetingUseCase() GreetingUseCase {
return NewGreetingUseCase()
}
// 定义injector函数,使用wire自动生成依赖注入代码
func InitializeGreetingUseCase() GreetingUseCase {
wire.Build(ProvideGreetingUseCase)
return nil
}
func main() {
// 使用wire生成的injector来获取GreetingUseCase实例
uc := InitializeGreetingUseCase()
println(uc.Greet("World"))
}
这段代码定义了一个简单的依赖项GreetingUseCase
,并提供了一个实现。ProvideGreetingUseCase
函数用于创建依赖项实例,而InitializeGreetingUseCase
函数使用wire库的Build
函数来生成依赖注入的代码。最后在main
函数中,我们通过InitializeGreetingUseCase
来获取依赖项实例并调用其Greet
方法。这个例子展示了如何使用wire来简化和自动化管理复杂的依赖关系。
评论已关闭