乐趣区

关于go:go-wire-入门连载二单体应用注入项目

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

二、injectors 注入

退出移动版