package di

import "github.com/edgexfoundry/go-mod-bootstrap/di"

di implements a simple generic dependency injection container.

Sample usage:

package main

import (
	"fmt"
	"github.com/edgexfoundry/go-mod-bootstrap/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

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

func (c *Container) Get(serviceName string) interface{}

Get wraps get to make it thread-safe.

func (*Container) Update

func (c *Container) Update(serviceConstructors ServiceConstructorMap)

Set updates its internal serviceMap with the contents of the provided ServiceConstructorMap.

type Get

type Get func(serviceName string) interface{}

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.

Source Files

container.go type.go

Version
v0.0.72 (latest)
Published
Jan 19, 2021
Platform
linux/amd64
Imports
2 packages
Last checked
5 days ago

Tools for package owners.