Inj
Package inj provides a simple mechanism of dependency injection
Install / Use
/learn @tmc/InjREADME
This was a bad idea. Don't do this.
inj
import "github.com/tmc/inj"
Package inj provides a simple mechanism of dependency injection
It combines a type to value map and the capability of invoking a function with parameters supplied based on their types.
- godoc: http://godoc.org/github.com/tmc/inj
- Coverage: 100%
- License: ISC
Example:
i := inj.New()
i.Register("foobar")
i.Register(42)
vals, _ := i.Call(func(a int, b string) string {
return fmt.Sprintf("%T:%v %T:%v", a, a, b, b)
})
fmt.Print(vals)
// Output:
// [int:42 string:foobar]
Variables
var (
// ErrNotFunc is returned by Call() if the provided value is not a function
ErrNotFunc = errors.New("inj: Provided value is not a function")
// ErrNotInterface is returned by RegisterAs() if the second argument is not an interface type
ErrNotInterface = errors.New("inj: Provided value is not an interface type")
// ErrDoesntImplement is returned by RegisterAs() if the first argument does not implement the second argument
ErrDoesntImplement = errors.New("inj: Provided value does not satisfy provided interface")
)
type Injector
type Injector map[reflect.Type]reflect.Value
Injector is the type to value mapping that is utilized when looking up parameters in Call()
func New
func New() Injector
New prepares a new Injector
func (Injector) Call
func (inj Injector) Call(fun interface{}) ([]reflect.Value, error)
Call invokes fun with parameters populated by registered types
func (Injector) Register
func (inj Injector) Register(value interface{}) (replaced bool)
Register provides a new implementation for a provided type
Returns true if this registration is replacing a previous registration
func (Injector) RegisterAs
func (inj Injector) RegisterAs(value interface{}, registeredType interface{}) (bool, error)
RegisterAs provides a new implementation for a provided type but attempts to register it as the interface type registeredType. registeredType must be supplied as a pointer to the interface type.
Returns true if this registration is replacing a previous registration. Returns an error if the second argument isn't an interface or the first argument doesn't satisify the second.
Example:
i := inj.New()
i.RegisterAs(os.Stdin, (*io.Reader)(nil))
Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.7kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
