项目地址

https://github.com/codegangsta/inject

用法

  1. 注入到函数

     package main
    
     import (
         "fmt"
         "github.com/codegangsta/inject"
     )
    
     type MyStr interface{}
    
     func TestFunc(name string, age int, isMarried bool, comment MyStr) {
         fmt.Printf("name: %s, age: %d, isMarried: %t, comment: %s\n", name, age, isMarried, comment)
     }
    
     func main() {
         inj := inject.New()
         // 依赖注入 - 不知道参数类型时构造函数参数
         inj.Map("lee")
         inj.Map(18)
         inj.Map(false)
         inj.MapTo("like spicy food!", (*MyStr)(nil))
         // 控制反转 - 调用函数
         inj.Invoke(TestFunc)
     }
  2. 注入到结构体

     package main
    
     import (
         "fmt"
         "github.com/codegangsta/inject"
     )
    
     type MyStr interface{}
    
     type People struct {
         Name      string `inject`
         Age       int    `inject`
         IsMarried bool   `inject`
         Comment   MyStr  `inject`
     }
    
     func main() {
         p := People{}
         inj := inject.New()
         // 依赖注入 - 不知道属性类型时构造结构体属性
         inj.Map("lee")
         inj.Map(18)
         inj.Map(false)
         inj.MapTo("like spicy food!", (*MyStr)(nil))
         // 控制反转 - 解析到结构体
         inj.Apply(&p)
         fmt.Printf("%v\n", p)
     }
文档更新时间: 2024-04-20 10:57   作者:lee