内容简介:依赖注入,控制反转 设计模式目的:实现模块与项目的解耦实现流程
依赖注入,控制反转 设计模式
目的:实现模块与项目的解耦
实现流程
首先模块有指针,其次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 中的方法就行
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web 2.0界面设计模式
黄玮 / 电子工业出版社 / 2013-9-1 / 59
本书集Web 2.0的发展及特点、Web 2.0界面设计模式基本理论、实际模式实践及代码实现等诸多内容于一身,具有很强的实用性。这些内容不是简单的顺序堆砌,而是以Web 2.0界面设计模式和应用为主线,其中完美地穿插了各种与之相关的Web 2.0设计理念、用户行为模式、用户体验及基于Dojo的实现方式等相关知识,真正做到将Web 2.0界面设计模式所需要的方方面面的知识有机地融为一个整体。实现不需......一起来看看 《Web 2.0界面设计模式》 这本书的介绍吧!