之前写过一篇文章,次要是介绍wire的多个依赖注入实现 go wire 入门
理论应用中,很多人用的是框架,比方 kratos是单体利用,这里再着重介绍一下,这方面的应用。
一、wire介绍
wire 依赖注入 有两个外围概念 providers 和 injectors 。
语法如下:
wire.Build(provide1, provide2,***)
- providers,次要是生成对象(结构图)的一般办法。这些办法接管所需依赖作为参数,创建对象(结构图)并将其返回。
- injectors,是注入。
二、定义providers
1、最简略的 provider,一个函数NewUser生成一个 User,没有参数。
package user
type User struct {
Name string
}
func NewUser() User {
return User{Name: "haha"}
}
2、有一个参数的 provider,一个函数NewRepository生成一个 Repository,参数User。
package user
type Repository struct {
Name string
}
func NewRepository(u User) Repository {
return Repository{Name: u.Name}
}
3、有两个参数的 provider,一个函数NewService生成一个 Service,参数ctx,repo。
package user
import "context"
type Service struct {
Name string
}
func NewService(ctx context.Context, repo Repository) (Service, error) {
return Service{Name: repo.Name}, nil
}
4、多个provider能够组成一个 provider 汇合
package user
import "github.com/google/wire"
var SuperSet = wire.NewSet(NewUser, NewRepository, NewService)
发表回复