container

package
v1.6.11 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2023 License: MIT Imports: 3 Imported by: 0

README

Контейнер объектов.

Под капотом используется https://pkg.go.dev/go.uber.org/dig, который реализует стратегию, "ленивого" создания объектов, т.е. только по востребованности и создание только один раз.

Реализует интерфейс Container.

type Container interface {
	Provide(interface{}) error
	Provides(...interface{}) error
	Invoke(interface{}) error
}
  • Provide - добавляет конструктор объекта в контейнер;
  • Provides - тоже самое что Provide, только сразу для пачки конструкторов;
  • Invoke - метод для вызова функций с внедренными зависимостями.

Все методы, в случае не удачи, возвращают ошибку.

Пример

func example(c Container) {
  if err := c.Provide(NewLogger); err != nil {
       panic(err)
   }

   err := c.Invoke(func(l Logger) {...})
   if err != nil {
       panic(err)
   }
}
Хелперы.

Пакет предоставляет хелпер Get[T any](container Container) (T, error) который позволяет получить определенный объект непосредственно из контейнера, без вызова метода Invoke.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Get

func Get[T any](container Container) (T, error)

Types

type Container

type Container interface {
	Provide(interface{}) error
	Provides(...interface{}) error
	Invoke(interface{}) error
}

func New

func New() (Container, error)

type DigDecorator

type DigDecorator struct {
	Dig *dig.Container
}

func NewDigDecorator

func NewDigDecorator() (*DigDecorator, error)

func (*DigDecorator) Invoke

func (container *DigDecorator) Invoke(function interface{}) error

func (*DigDecorator) Provide

func (container *DigDecorator) Provide(constructor interface{}) error

func (*DigDecorator) Provides

func (container *DigDecorator) Provides(constructors ...interface{}) error

Jump to

Keyboard shortcuts

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