基本例子
import ( "github.com/sohaha/zlsgo/zdi" ) // Conf 配置结构体 type Conf struct { Addr string } // User 用户 type User struct { Name string } // Fs 接口 type Fs interface {} func main(){ // 初始化 di := zdi.New() // 直接注入一个初始化好的变量 di.Maps(Conf{Addr: "127.0.0.1"}) // 延迟注入,用到时候才会执行 di.Provide(func(c Conf) *User { return &User{} }) // 注入接口 di.Map(Conf{}, zdi.WithInterface((*Fs)(nil))) // 调用 di.Invoke(func(c Conf,u *User){ // 这里可以用 Conf 了 }) // 取值 var c *Conf di.Resolve(&c) }
高级功能
ZNET 预设注入结构
package elements import ( "reflect" "github.com/sohaha/zlsgo/zdi" "github.com/sohaha/zlsgo/znet" ) type ( invoker func(c *znet.Context) Renderer ) type Renderer struct { DemoData string } var invokerValue zdi.PreInvoker = (invoker)(nil) func (h invoker) Invoke(v []interface{}) ([]reflect.Value, error) { c := v[0].(*znet.Context) resp := h(c) c.String(200, resp.DemoData) return []reflect.Value{}, nil } func init() { znet.RegisterRender(invokerValue) }
文档待补充
- 预设调用模板提高性能
- 注入绑定结构体