Go: 使用 `github.com/google/wire` 实现和管理复杂的依赖注入
package main
import (
"fmt"
"github.com/google/wire"
)
// 定义依赖的接口
type GreetingService interface {
Greet() string
}
// 实现接口的具体结构体
type englishGreetingService struct{}
func (s *englishGreetingService) Greet() string {
return "Hello!"
}
type frenchGreetingService struct{}
func (s *frenchGreetingService) Greet() string {
return "Bonjour!"
}
// 定义提供者函数,用于创建GreetingService实例
var Set = wire.NewSet(
wire.Struct(new(englishGreetingService), ""),
wire.Struct(new(frenchGreetingService), ""),
)
// 使用Wire生成依赖注入的代码
func InitializeGreetingService(language string) GreetingService {
switch language {
case "english":
wire.Build(Set)
return &englishGreetingService{}
case "french":
wire.Build(Set)
return &frenchGreetingService{}
default:
wire.Build(Set)
return &englishGreetingService{}
}
}
func main() {
service := InitializeGreetingService("french")
fmt.Println(service.Greet())
}
这个代码示例展示了如何使用wire
库来管理依赖注入。首先定义了一个接口和两个结构体来实现它,然后通过wire.NewSet
定义了提供者函数。最后,使用wire.Build
函数生成依赖注入的代码。在main
函数中,我们调用了生成的初始化函数来获取服务实例,并打印出问候语。这个例子简单明了地展示了如何使用wire
来管理复杂的依赖关系。
评论已关闭