// 单例数据绑定
foo := new(Foo)
c.Bind("foo", foo)
// 绑定函数
var f = func() string {
return "rand string"
}
c.Bind("f", f)
// 绑定slice
var s = []string{"a", "b"}
c.Bind("s", s)
// 强制覆盖已存在的单例
c.Bind("foo", new(Foo2), WithCover(true))
// 判断原有对象是否存在
if c.Has("Foo") {
// 获取一个已存在的对象
c.Get("Foo").(*Foo)
}
// 删除一个对象
c.Remove("Foo")
// 清除容器所有对象
c.Flush()
// 解析容器中已存在的对象,同Get()
c.Make("Foo")
// 解析结构体
type Person struct {
Bar *Bar `inject:"bar"`
Foo *Foo `inject:"foo"`
}
c.Make(new(Person))
// 解析函数
// 普通标量函数
func NormalSample(id int, str string) (int, string) {
return id, str
}
fmt.Printf("%v", c.Make(NormalSample, 10, `foo`))
// 支持多级函数嵌套
// 假设 *Nesting *Sample 已存在于容器中
func StructFuncFunc(id int, nesting *Nesting, fn func(nesting *Nesting) int, prt *Sample) int {
return id + fn(nesting) + prt.Id
}
// 容器会自动解析已存在的 *Nesting *Sample
// 对于手动定义的参数,必须放在函数前置
fmt.Printf("%v", c.Make(StructFuncFunc, 10))
go get -u github.com/firmeve/firmeve/container