内容简介:依赖注入,控制反转 设计模式目的:实现模块与项目的解耦实现流程
依赖注入,控制反转 设计模式
目的:实现模块与项目的解耦
实现流程
首先模块有指针,其次DI拿到指针,再次DI将指针赋给调用者
共调研了三个框架:iris内置的di&mvc,uber-dig,google/wire
最终决定使用 wire
google DI 框架 wire
它通过使用代码生成构建容器来避免运行时反射。
用法:
// file main.go package main import "bytes" type Logger struct{} func (logger *Logger) Log(message string) { println(message) } type HttpClient struct { logger *Logger } func (client *HttpClient) Get(url string) string { client.logger.Log("Getting " + url) return "my response from " + url } func NewHttpClient(logger *Logger) *HttpClient { return &HttpClient{logger} } type ConcatService struct { logger *Logger client *HttpClient } func NewConcatService(logger *Logger, client *HttpClient) *ConcatService { return &ConcatService{logger, client} } func (service *ConcatService) GetAll(urls ...string) string { service.logger.Log("Runing GetAll") var result bytes.Buffer for _, url := range urls { result.WriteString(service.client.Get(url)) } return result.String() } func main() { service := CreateConcatService() result := service.GetAll( "http://example.com", "https://drewolson.org", ) println(result) }
// file container.go package main import ( "github.com/google/wire" ) // CreateConcatService 设置 service 的依赖 // wire 生成 wire_gen.go 的 模板文件 func CreateConcatService() *ConcatService { panic(wire.Build( wire.NewSet(wire.Struct(new(Logger))), // struct 使用 wire.Struct 创建 NewHttpClient, NewConcatService, )) }
go get github.com/google/wire/cmd/wire wire
执行 wire 解析 container.go ——> wire_gen.go
解析完毕后删除 container.go 文件, 使用 wire_gen.go 中的方法就行
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
iOS Web应用开发
皮基 (Andrea Picchi) / 罗晴明 / 人民邮电出版社 / 2013-8-1 / CNY 79.00
本书介绍了如何使用Web标准技术来为iPhone和iPad制作Web应用。书中利用最前沿的Web和移动技术,演示了如何使用HTML5来完成繁重的基础工作,如何使用CSS3来制作外观,以及如何使用JavaScript来为移动网站或Web应用添加程序逻辑。 通过阅读本书,读者可以掌握面向移动的项目的开发流程。作者逐章递进,引导读者了解iOS设计与开发的各个步骤。读者可以学习到如下知识: 设......一起来看看 《iOS Web应用开发》 这本书的介绍吧!