zvvq技术分享网

如何使用golang框架对一个依赖项进行依赖注入(

作者:zvvq博客网
导读在 golang 中,可以使用依赖注入框架,如 wire,来管理对象之间的依赖关系。wire 使用代码生成和反射实现这一功能,允许在运行时传递依赖项。要使用 wire,需要创建一个注入函数,指

在 golang 中,可以用依赖注入架构,如 wire,来管理对象间的依存关系。wire 应用代码生成和反射完成这一功能,容许在运行时传递依赖项。要使用 wire,必须创建一个引入函数,特定怎样创建对象以及依赖项,并用 wire.build函数创建和初始化对象。根据依赖注入,能够轻松变更程序中的依存关系,而无需修改代码的其他部分。 zvvq.cn

内容来自zvvq

应用 Golang 架构对依赖项开展依赖注入

内容来自samhan

依赖注入是一种设计模式,它允许在运行时将依存关系传达给目标。在 Golang 中,有很多架构可以方便地完成依赖注入,比如 Wire。

内容来自zvvq,别采集哟

应用 Wire完成依赖注入

本文来自zvvq

Wire 是一个 Golang 依赖注入库,它使用代码生成和运行中反射来简化依存关系的监管。要使用 Wire,首先要在项目中导进它:

本文来自zvvq

import"github.com/google/wire"

内容来自samhan666

下面,创建一个引入函数,该函数回到要引入对象以及依赖项。比如,如果有一个 UserService 取决于 UserRepository,则引入函数能够具体如下:

内容来自zvvq,别采集哟

funcNewUserService(ur*UserRepository)*UserService{

内容来自samhan666

return&UserService{ur}

内容来自samhan666

} 内容来自samhan666

varSet = wire.NewSet(NewUserService,NewUserRepository)

内容来自zvvq,别采集哟

Set 函数应用 wire.NewSet 创建一个结合,该结合指定了怎样创建服务和存储库。 copyright zvvq

要使用引入目标,可以创建一个 wire.Build函数:

内容来自samhan

funcmain(){

zvvq

wire.Build(Set)

copyright zvvq

} zvvq好,好zvvq

这会建立并复位 UserService 和 UserRepository目标,并将它们注入到必须他们代码中。 zvvq.cn

实战案例

zvvq.cn

考虑一个简单的 HTTP 服务器,它使用一个服务层和一个存储库层来管理用户信息。服务层有一个 UserService 解决客户有关的思路,存储库层有一个 UserRepository来管理用户信息。 内容来自samhan

可以用 Wire完成对这两个层依赖注入:

内容来自zvvq

packagemain

zvvq

import( 本文来自zvvq

"net/http" copyright zvvq

"github.com/google/wire" 内容来自zvvq,别采集哟

"github.com/gorilla/mux" copyright zvvq

)

本文来自zvvq

type UserService struct{

本文来自zvvq

UserRepository*UserRepository 内容来自zvvq

} 内容来自samhan666

func(s*UserService)GetUser(whttp.ResponseWriter,r*http.Request){

本文来自zvvq

//... 内容来自samhan666

} 内容来自samhan

type UserRepositorystruct{}

内容来自zvvq

func(r*UserRepository)GetUsers()[]string{ zvvq好,好zvvq

//... 内容来自samhan666

} 内容来自samhan666

varSet = wire.NewSet(NewUserService,NewUserRepository,NewRouter)

zvvq好,好zvvq

varRouter*mux.Router

内容来自samhan

funcNewRouter()*mux.Router{ 内容来自zvvq

r:=mux.NewRouter() zvvq.cn

r.HandleFunc("/users",UserService.GetUser)

zvvq

Router=r

内容来自samhan666

returnRouter zvvq好,好zvvq

}

copyright zvvq

funcmain(){ 内容来自zvvq,别采集哟

wire.Build(Set,NewRouter)

内容来自samhan666

} 内容来自samhan666

在这个例子中,Set 结合还包含了 NewRouter 函数,该函数建立并配置了 Gorilla mux 路由器。 NewRouter 函数也使用 wire.Build展开了引入,那样它就可以浏览 UserService 和 UserRepository目标。

copyright zvvq

根据使用依赖注入,可以轻松地变更程序中的依存关系,而无需修改代码的其他部分。这使得程序更容易维护和测试。

zvvq

以上就是怎么使用golang架构对一个依赖项开展依赖注入的详细内容,大量请关注其他类似文章! zvvq