关于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 注入

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理