Socket
Book a DemoInstallSign in
Socket

github.com/tmc/inj

Package Overview
Dependencies
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/tmc/inj

Source
Go Modules
Version
v0.0.0-20150205054550-1500fa2abfc6
Version published
Created
Source

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))

FAQs

Package last updated on 05 Feb 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts