1. 手动实现依赖注入
package main
import "fmt"
type A struct {
B *B
}
type B struct {
Inject string
}
func main() {
var a A
b := B{Inject: "Golang"}
fmt.Println(b.Inject)
a.B = &b
fmt.Println(a.B.Inject)
}
2.开源的依赖注入框架
- 依赖反射实现的运行时的依赖注入(facebook/inject、uber/dig)
- 使用代码生成实现的依赖注入(google/wire)
facebookgo/inject 实现依赖注入: 类A的实例a是需要被注入的对象,类B的实例b是依赖的组件 将a、b的依赖关系交给第三方(IOC容器)来控制,调用Provide我们不再需要编写复杂的依赖代码(各种参数,实例的互相传入)。执行完Populate后,我们就可以直接使用实例a,其中需要依赖的组件在运行时由IOC容器来注入。
package main
import (
"fmt"
"net/http"
"os"
"github.com/facebookgo/inject"
)
// Our A