参考文档:
ioc-go
ali ioc-go
引用包
go get github.com/golobby/container/v3
import "github.com/golobby/container/v3"
demo
package main
import (
"fmt"
"github.com/golobby/container/v3"
)
type Shape interface {
SetArea(int)
GetArea() int
}
type Circle struct {
a int
}
func (c *Circle) SetArea(a int) {
c.a = a
}
func (c Circle) GetArea() int {
return c.a
}
type Database interface {
Connect() bool
}
var instance = container.New()
func main() {
if err := instance.Singleton(func() Shape {
return &Circle{a: 13}
}); err != nil {
fmt.Println(err)
return
}
if err := instance.Call(func(s1 Shape) {
s1.SetArea(666)
}); err != nil {
fmt.Println(err)
}
if err := instance.Call(func(s2 Shape) {
if s2.GetArea() == 666 {
fmt.Println("success")
}
}); err != nil {
fmt.Println(err)
}
}
可以通过通过函数、变量和结构解决。
代码取决于抽象程度
框架中简单的绑定
err := container.Singleton(func() Config {
return &JsonConfig{...}
})
var c Config
err := container.Resolve(&c)
此ioc框架将抽象绑定到具体实现中。
绑定对象,是将抽象的实现引入ioc容器的过程。过程中可以确定解析类型、单例或者瞬态。