Skip to content

Latest commit

 

History

History
82 lines (59 loc) · 2.31 KB

README_cn.md

File metadata and controls

82 lines (59 loc) · 2.31 KB

DI

GoDoc Build Status Coverage Status Go Report Card

EN README

Golang实现依赖注入容器,提供内部服务实例管理。

GoDoc

安装

go get github.com/gookit/di

快速使用

package main

import (
    "github.com/gookit/di"
)

func main() {
    box := di.New("my-services")
    
    // 添加简单的值
    box.Set("service0", "val1")
    box.Set("service1", &MyService1{})
    
    // 注册一个回调函数。
    // - 它会在第一次获取时执行。
    // - 执行返回的结果,会被保存起来
    // - 后续获取时都是拿到的第一次的结果,不会再次执行这个函数
    box.Set("service2", func() (interface, error) {
    	return &MyApp{}, nil
    })
    
    // 注册一个工厂函数
    // - 每次获取时,都会执行这个函数。不会保存结果,每次都返回新的。
    box.Set("service3", func() (interface, error) {
    	return &MyObject{}, nil
    }, true)
    
    // 获取 
    v1 := box.Get("service1") // "val1"
    
    // 是一个闭包,会自动执行它. 注意: v2 == v3
    v2 := box.Get("service2").(*MyApp)
    v3 := box.Get("service2").(*MyApp)
    
    // 是一个工厂方法. 注意: v4 != v5
    v4 := box.Get("service3").(*MyObject)
    v5 := box.Get("service3").(*MyObject)
}

API 方法

  • func (c *Container) Set(name string, val interface{}, isFactory ...bool) *Container
  • func (c *Container) Get(name string) interface{}
  • func (c *Container) SafeGet(name string) (val interface{}, err error)
  • func (c *Container) Inject(ptr interface{}) (err error)

参考

License

MIT