autowire

package module
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2023 License: Apache-2.0 Imports: 5 Imported by: 0

README

Dependency Injection for Go

It is a very simple dependency injection component for go.

Usage

1、Define interface
type IServiceA interface {
    DoServiceA() error
}

type IServiceB interface {
    DoServiceB() error
}

type IServiceC interface {
    DoServiceC() error
}
2、Implements interface
// ServiceA
type ServiceA struct {
	name string
}

func (s *ServiceA) DoServiceA() error {
	fmt.Println("ServiceA DoServiceA")
	return nil
}

// ServiceB
type ServiceB struct {
}

func (s *ServiceB) DoServiceB() error {
	fmt.Println("ServiceB DoServiceB")
	return nil
}

// ServiceC
type ServiceC struct {
	Sa IServiceA `bean:"sa"` // autowire by name first
	Sb IServiceB // autowire by type
}

func (s *ServiceC) DoServiceC() error {
	fmt.Println("ServiceC DoServiceC")
	err := s.Sa.DoServiceA()
	if err != nil {
		return err
	}
	err = s.Sb.DoServiceB()
	return err
}
3、Autowire beans
func main() {
    sa := &ServiceA{}
    sb := &ServiceB{}
    sc := &ServiceC{}

    // autowire beans
    bf := NewBeanFactory()
    bf.RegisterBeans(sa, sb, sc)
    bf.Autowire()

    sc.DoServiceC()
    // out:
    // ServiceC DoServiceC
    // ServiceA DoServiceA
    // ServiceB DoServiceB
}
4、A practice sample

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrBeanNotFound = errors.New("can not find bean")

Functions

func GetBeanByType

func GetBeanByType[T any](bf BeanFactory) (bean T, err error)

func GetBeansByType

func GetBeansByType[T any](bf BeanFactory) (beans []T)

func GetReflectType

func GetReflectType[T any]() reflect.Type

func RegisterBeanCreatorByType

func RegisterBeanCreatorByType[T any](bf BeanFactory, creator BeanCreator) error

Types

type BeanCreator

type BeanCreator func(bf BeanFactory) any

BeanCreator creates bean.

type BeanFactory

type BeanFactory interface {
	GetBeanByName(beanName string) (bean any, found bool)
	GetBeanByType(beanType reflect.Type) (bean any, err error)
	GetBeansByType(beanType reflect.Type) (beans []any)
	RegisterBeanByName(beanName string, bean any) error
	RegisterBeans(beans ...any)
	RegisterBeanCreatorByType(beanType reflect.Type, creator BeanCreator) error
	RegisterBeanCreatorByName(beanName string, creator BeanCreator) error
	// Autowire will wire all beans.
	Autowire() error
	// AutowireBean will wire the specific bean.
	AutowireBean(bean any) error
}

BeanFactory manages beans.

func NewBeanFactory

func NewBeanFactory() BeanFactory

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL