**:
僅作跟人備份,瀏覽請看原文
專案規模小的情況下,是否有依賴注入框架問題不大,但是當專案變大之後,有乙個合適的依賴注入框架是十分必要的。通過調研,了解到的golang中常用的依賴注入框架主要有 inject dig等等。但是今天要介紹的是wire,乙個編譯期實現依賴注入的框架。
步驟如下:
首先新增依賴
github.com/google/wire v0.3.0
然後編寫下面的例子
package main
import (
"fmt")
name string
score int}
return a.name}
type banana struct
func (b *banana) speak() string
type shop struct
func (s *shop) sail() string
func init1()
s := shop
return s}
func newb() *banana
return b}
name: "asdfasdf",
score: 0,
} return a}
func main()
上面的程式正常情況下是不能執行的, 會報錯。我們需要在main.go的同級目錄下建立乙個wire.go檔案,其中的內容如下:
}需要注意,這裡的第一行 // +build wireinject十分的重要,不能省略。
下面十分的重要。
在wire.go所在資料夾下執行wire命令(先要使用go mod download 和go mod vendor),這樣就會根據規則新建出物件間相互依賴的樹。
// code generated by wire. do not edit.
//go:generate wire
//+build !wireinject
package main
// injectors from wire.go:
func initializeshop() shop
如果其中的類關係或者建立函式有變化,可以直接使用命令 go generate進行重新生成。(當然也可以在ide中直接執行進行重新整理)
最終的結構如下圖:
專案結構
最後,需要強調一下。
1、如果在建構函式中有相同的型別,比如,兩個struct都有乙個構造欄位string,那麼wire會在進行inject的時候報錯,我們需要做的是把其中的乙個string重新定義乙個型別,比如 type selfstring string,然後讓有歧義的string型別變換成selfstring,這樣就能夠成功注入了。
2、在生成wire_gen.go的時候,如果已經生成了檔案,並且本次沒有新增函式,initialize函式,那麼可以直接使用wire_gen.go 中的go generate進行重新生成。但是如果新增加了乙個類的注入過程,應該使用wire命令重新生成wire_gen.go檔案,注意要把
// +build wireinject
注釋掉,否則找不到對應的類。
go 依賴注入 哪個好 PHP的依賴注入 DI
php當中的依賴注入和控制反轉是面試中經常問到的問題。同時,很多框架中也使用到了這種設計模式,可能有很多小夥伴們對這兩個概念認識比較模糊,下面我就來給大家講講什麼是依賴注入。概念 是一種允許我們從硬編碼的依賴中解耦出來,從而在執行時或者編譯時能夠修改的軟體設計模式。說明 要想理解di 依賴注入 首先...
使用google wire注入依賴
google wire是golang的乙個依賴注入解決的工具,這個工具能夠自動生成類的依賴關係。package main import fmt time 採集函式 type f func 採集物件 type worker struct 採集模組 type beater struct newfunc ...
依賴注入有點 在 Xunit 中使用依賴注入
今天介紹乙個基於xunit和微軟依賴注入框架的 真正 的依賴注入使用方式 xunit.dependencyinjection,來自大師的作品,讓你在測試 裡使用依賴注入像 asp.net core 一樣輕鬆 在 xunit 測試專案裡新增對xunit.dependencyinjection的引用 d...