之前写过一篇文章,次要是介绍 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)