Documentation ¶
Overview ¶
di implements a simple generic dependency injection container.
Sample usage:
package main import ( "fmt" "github.com/agile-edgex/go-mod-bootstrap/v3/di" ) type foo struct { FooMessage string } func NewFoo(m string) *foo { return &foo{ FooMessage: m, } } type bar struct { BarMessage string Foo *foo } func NewBar(m string, foo *foo) *bar { return &bar{ BarMessage: m, Foo: foo, } } func main() { container := di.NewContainer( di.ServiceConstructorMap{ "foo": func(get di.Get) interface{} { return NewFoo("fooMessage") }, "bar": func(get di.Get) interface{} { return NewBar("barMessage", get("foo").(*foo)) }, }) b := container.Get("bar").(*bar) fmt.Println(b.BarMessage) fmt.Println(b.Foo.FooMessage) }
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func TypeInstanceToName ¶
func TypeInstanceToName(v interface{}) string
TypeInstanceToName converts an instance of a type to a unique name.
Types ¶
type Container ¶
type Container struct {
// contains filtered or unexported fields
}
Container is a receiver that maintains a list of services, their constructors, and their constructed instances in a thread-safe manner.
func NewContainer ¶
func NewContainer(serviceConstructors ServiceConstructorMap) *Container
NewContainer is a factory method that returns an initialized Container receiver struct.
func (*Container) Update ¶
func (c *Container) Update(serviceConstructors ServiceConstructorMap)
Set updates its internal serviceMap with the contents of the provided ServiceConstructorMap.
type ServiceConstructor ¶
type ServiceConstructor func(get Get) interface{}
ServiceConstructor defines the contract for a function/closure to create a service.
type ServiceConstructorMap ¶
type ServiceConstructorMap map[string]ServiceConstructor
ServiceConstructorMap maps a service name to a function/closure to create that service.
Click to show internal directories.
Click to hide internal directories.