ioc

package module
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Feb 21, 2025 License: MIT Imports: 3 Imported by: 1

README

IOC

Go Reference

Package ioc provides a reflection-based dependency injection toolkit.

Feature

  • Support shared services and scoped services.
  • Support setting services to the scope.
  • Automatic cleanup.
  • Support concurrency.

Dependencies

  • go 1.20+

Usage

import "gitee.com/erdian718/ioc"

func main() {
	provider, err := ioc.New().
		Add(..., true).
		Add(..., false).
		Build()
	if err != nil {
		panic(err)
	}
	defer provider.Release()

	scope := provider.Create()
	defer scope.Release()

	s, err := ioc.Resolve[ServiceType](scope)
	if err != nil {
		panic(err)
	}
	// ...
}

Note

  • Only Provider.Create method is goroutine safe.

Documentation

Overview

Package ioc provides a reflection-based dependency injection toolkit.

Example
package main

import (
	"fmt"
	"io"
	"strconv"
	"strings"

	"gitee.com/erdian718/ioc"
)

func main() {
	provider, err := ioc.New().
		Add(func() io.Reader {
			return nil
		}, false).
		Add(func() int {
			return 718
		}, true).
		Add(func(c int, r io.Reader) (string, error) {
			bs, err := io.ReadAll(r)
			if err != nil {
				return "", err
			}
			return string(bs) + strconv.Itoa(c), nil
		}, false).
		Build()
	if err != nil {
		panic(err)
	}
	defer provider.Release()

	scope := provider.Create()
	defer scope.Release()

	if err := ioc.Set[io.Reader](scope, strings.NewReader("erdian")); err != nil {
		panic(err)
	}
	result, err := ioc.Resolve[string](scope)
	if err != nil {
		panic(err)
	}
	fmt.Println(result)
}
Output:

erdian718

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidCreator   = errors.New("ioc: invalid creator")
	ErrServiceNotFound  = errors.New("ioc: service not found")
	ErrDuplicateService = errors.New("ioc: duplicate service")
	ErrCyclicDependence = errors.New("ioc: cyclic dependence")
)

Errors.

Functions

func Resolve added in v0.4.0

func Resolve[T any](scope *Scope) (T, error)

Resolve resolves the dependencies.

func Set added in v0.4.0

func Set[T any](scope *Scope, value any) error

Set sets a value to the scope.

Types

type Builder added in v0.4.0

type Builder struct {
	// contains filtered or unexported fields
}

Builder represents the builder for building a provider.

func New

func New() *Builder

New creates a new builder.

func (*Builder) Add added in v0.4.0

func (b *Builder) Add(creator any, shared bool) *Builder

Add adds a service to the builder. If shared is true, all scopes share the same service.

func (*Builder) Build added in v0.4.0

func (b *Builder) Build() (*Provider, error)

Build builds a provider.

type Provider

type Provider struct {
	// contains filtered or unexported fields
}

Provider defines a mechanism for retrieving a service object.

func (*Provider) Create

func (p *Provider) Create() *Scope

Create creates a new scope. The method is goroutine safe.

func (*Provider) Release

func (p *Provider) Release() error

Release frees up resources allocated for the provider.

type Scope

type Scope struct {
	// contains filtered or unexported fields
}

Scope represents a scope for retrieving a service object.

func (*Scope) Release

func (s *Scope) Release() error

Release frees up resources allocated for the scope.

func (*Scope) Resolve

func (s *Scope) Resolve(values ...any) error

Resolve resolves the dependencies.

Jump to

Keyboard shortcuts

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