Documentation ¶
Index ¶
- Variables
- func Get[T any](c Container, opts ...OptionsFunc) (T, error)
- func GetByTag[T any](c Container, tag TagID) ([]T, error)
- func Has[T any](c Container, opts ...OptionsFunc) bool
- func Initialised[T any](c Container, opts ...OptionsFunc) bool
- func MustGet[T any](c Container, opts ...OptionsFunc) T
- func MustGetByTag[T any](c Container, tag TagID) []T
- func Print(c Container, w io.Writer) error
- type Alias
- type Argument
- type ArgumentBuilder
- type Builder
- func (b *Builder) Aliases(aliases ...Alias) *Builder
- func (b *Builder) Build() (Container, error)
- func (b *Builder) CompilerPass(stage CompilerPassStage, priority int, pass CompilerPass) *Builder
- func (b *Builder) Functions(functions ...*FunctionDefinitionBuilder) *Builder
- func (b *Builder) Services(services ...*DefinitionBuilder) *Builder
- type CompilerPass
- type CompilerPassFunc
- type CompilerPassStage
- type Container
- type ContainerBuilder
- func (b *ContainerBuilder) AddAliases(aliases ...Alias) *ContainerBuilder
- func (b *ContainerBuilder) AddCompilerPass(stage CompilerPassStage, priority int, pass CompilerPass) *ContainerBuilder
- func (b *ContainerBuilder) AddDefinitions(definitions ...*Definition) *ContainerBuilder
- func (b *ContainerBuilder) AddFunctions(functions ...*FunctionDefinition)
- func (b *ContainerBuilder) Build() (Container, error)
- func (b *ContainerBuilder) GetAlias(id ID) (Alias, bool)
- func (b *ContainerBuilder) GetAliases() []Alias
- func (b *ContainerBuilder) GetDefinition(id ID) (*Definition, bool)
- func (b *ContainerBuilder) GetDefinitions() []*Definition
- func (b *ContainerBuilder) GetFunction(id ID) (*FunctionDefinition, bool)
- func (b *ContainerBuilder) GetFunctions() []*FunctionDefinition
- func (b *ContainerBuilder) RemoveAliases(ids ...ID) *ContainerBuilder
- func (b *ContainerBuilder) RemoveDefinitions(ids ...ID) *ContainerBuilder
- func (b *ContainerBuilder) SetAliases(aliases ...Alias) *ContainerBuilder
- func (b *ContainerBuilder) SetDefinitions(definitions ...*Definition) *ContainerBuilder
- func (b *ContainerBuilder) SetFunctions(functions ...*FunctionDefinition)
- type Definition
- func (d *Definition) AddMethodCalls(methodCalls ...*Method) *Definition
- func (d *Definition) AddTags(tags ...*Tag) *Definition
- func (d *Definition) GetFactory() *Factory
- func (d *Definition) GetMethodCalls() []*Method
- func (d *Definition) GetTags() []*Tag
- func (d *Definition) ID() ID
- func (d *Definition) IsAutowired() bool
- func (d *Definition) IsLazy() bool
- func (d *Definition) IsPublic() bool
- func (d *Definition) IsShared() bool
- func (d *Definition) Of() reflect.Type
- func (d *Definition) RemoveMethodCalls(names ...string) *Definition
- func (d *Definition) RemoveTags(ids ...TagID) *Definition
- func (d *Definition) SetAutowired(autowired bool) *Definition
- func (d *Definition) SetFactory(factory *Factory) *Definition
- func (d *Definition) SetLazy(lazy bool) *Definition
- func (d *Definition) SetMethodCalls(methodCalls ...*Method) *Definition
- func (d *Definition) SetPublic(public bool) *Definition
- func (d *Definition) SetShared(shared bool) *Definition
- func (d *Definition) SetTags(tags ...*Tag) *Definition
- func (d *Definition) String() string
- type DefinitionBuilder
- func (b *DefinitionBuilder) Args(args ...any) *DefinitionBuilder
- func (b *DefinitionBuilder) Autowired() *DefinitionBuilder
- func (b *DefinitionBuilder) Build() (*Definition, error)
- func (b *DefinitionBuilder) Eager() *DefinitionBuilder
- func (b *DefinitionBuilder) ID(id ID) *DefinitionBuilder
- func (b *DefinitionBuilder) Lazy() *DefinitionBuilder
- func (b *DefinitionBuilder) MethodCall(name string, args ...any) *DefinitionBuilder
- func (b *DefinitionBuilder) NotAutowired() *DefinitionBuilder
- func (b *DefinitionBuilder) NotShared() *DefinitionBuilder
- func (b *DefinitionBuilder) Private() *DefinitionBuilder
- func (b *DefinitionBuilder) Public() *DefinitionBuilder
- func (b *DefinitionBuilder) Shared() *DefinitionBuilder
- func (b *DefinitionBuilder) Tags(tags ...any) *DefinitionBuilder
- type Factory
- type FuncArgument
- type FuncArgumentsList
- type Function
- type FunctionDefinition
- type FunctionDefinitionBuilder
- type ID
- type InterfaceResolutionPass
- type Method
- type OptionsFunc
- type Reference
- type Tag
- type TagID
- type TaggedCollection
- type Value
Constants ¶
This section is empty.
Variables ¶
var ( DefaultPublic = false DefaultLazy = true DefaultAutowired = true )
Defaults for Definition properties. Change them to change the default configuration of services. These can be overridden per Definition.
Functions ¶
func Get ¶
func Get[T any](c Container, opts ...OptionsFunc) (T, error)
Get returns a service from the container and ensures its type.
func GetByTag ¶ added in v0.3.0
GetByTag returns all services from the container that have the given tag.
func Has ¶ added in v0.3.0
func Has[T any](c Container, opts ...OptionsFunc) bool
Has returns true if the container has a service with the given ID.
func Initialised ¶ added in v0.3.0
func Initialised[T any](c Container, opts ...OptionsFunc) bool
Initialised returns true if the service has been initialised, i.e. if the container currently holds the instance of that service.
func MustGet ¶
func MustGet[T any](c Container, opts ...OptionsFunc) T
MustGet is like Get but panics if an error occurs.
func MustGetByTag ¶ added in v0.3.0
MustGetByTag is like GetByTag but panics if an error occurs.
Types ¶
type Alias ¶ added in v0.3.0
type Alias struct {
// contains filtered or unexported fields
}
Alias represents an additional ID for a service. Any number of aliases can be created for a single service. Services may be referenced by their ID or any of their aliases.
func NewAlias ¶ added in v0.3.0
NewAlias creates a new alias. NewAlias("foo", "bar") aliases service "bar" as "foo".
func NewAliasT ¶ added in v0.3.0
NewAliasT creates a new alias. The target ID is derived from the type parameter. NewAliasT[Foo]("bar") aliases service "bar" as "Foo".
func NewAliasTT ¶ added in v0.3.0
NewAliasTT creates a new alias. The target and alias IDs are derived from the type parameters. NewAliasTT[Foo, Bar]() aliases service "Bar" as "Foo".
type Argument ¶ added in v0.3.0
type Argument interface { fmt.Stringer Type() reflect.Type // contains filtered or unexported methods }
Argument represents a dependency that can be resolved by the container. Service factory functions and methods calls use Argument objects. Arguments can be either values, references or collections of tagged services.
type ArgumentBuilder ¶ added in v0.3.0
type ArgumentBuilder struct {
// contains filtered or unexported fields
}
ArgumentBuilder is a helper for building arguments. It is used by the DefinitionBuilder to define arguments for a service factory and method calls.
func Ref ¶
func Ref[T any](id ...ID) *ArgumentBuilder
Ref returns a new argument builder for a Reference.
func Tagged ¶ added in v0.3.0
func Tagged[T any](tag TagID) *ArgumentBuilder
Tagged returns a new argument builder for a TaggedCollection.
func Zero ¶ added in v0.3.2
func Zero() *ArgumentBuilder
func (*ArgumentBuilder) Build ¶ added in v0.3.0
func (b *ArgumentBuilder) Build() Argument
func (*ArgumentBuilder) Idx ¶ added in v0.3.0
func (b *ArgumentBuilder) Idx(i uint) *ArgumentBuilder
Idx sets the index of the argument. E.g. Idx(1) will set the argument as the second argument of a function.
type Builder ¶ added in v0.3.0
type Builder struct {
// contains filtered or unexported fields
}
Builder is a helper for building a container. It offers a fluent interface that incorporates other helpers to make the process of setting up the container easy and convenient for the user. This is the recommended way of building a container.
func New ¶
func New() *Builder
New creates a new Builder. This is the recommended entrypoint to the godi library.
func (*Builder) CompilerPass ¶ added in v0.4.0
func (b *Builder) CompilerPass(stage CompilerPassStage, priority int, pass CompilerPass) *Builder
func (*Builder) Functions ¶ added in v0.7.0
func (b *Builder) Functions(functions ...*FunctionDefinitionBuilder) *Builder
func (*Builder) Services ¶ added in v0.3.0
func (b *Builder) Services(services ...*DefinitionBuilder) *Builder
type CompilerPass ¶ added in v0.3.0
type CompilerPass interface {
Compile(builder *ContainerBuilder) error
}
CompilerPass is a component of the compiler that can inspect and modify the container.
func NewInterfaceResolutionPass ¶ added in v0.3.0
func NewInterfaceResolutionPass() CompilerPass
type CompilerPassFunc ¶ added in v0.3.0
type CompilerPassFunc func(builder *ContainerBuilder) error
func NewAliasValidationPass ¶ added in v0.3.0
func NewAliasValidationPass() CompilerPassFunc
NewAliasValidationPass returns a compiler pass that validates all aliases. It ensures that they point to existing service definitions.
func NewAutowirePass ¶ added in v0.3.0
func NewAutowirePass() CompilerPassFunc
NewAutowirePass returns a compiler pass that automatically wires the arguments of factories, method calls and functions based on their types.
func NewCycleValidationPass ¶ added in v0.3.0
func NewCycleValidationPass() CompilerPassFunc
NewCycleValidationPass returns a compiler pass that validates that there are no circular references.
func NewEagerInitPass ¶ added in v0.3.0
func NewEagerInitPass() CompilerPassFunc
NewEagerInitPass returns a compiler pass that initializes all services that are marked as eager.
func NewFinalizationPass ¶ added in v0.6.6
func NewFinalizationPass() CompilerPassFunc
func NewReferenceValidationPass ¶ added in v0.3.0
func NewReferenceValidationPass() CompilerPassFunc
NewReferenceValidationPass returns a compiler pass that validates all arguments of factories, method calls and functions that reference other services. It ensures that the referenced services exist.
func (CompilerPassFunc) Compile ¶ added in v0.3.0
func (fn CompilerPassFunc) Compile(builder *ContainerBuilder) error
type CompilerPassStage ¶ added in v0.3.0
type CompilerPassStage uint8
const ( PreOptimisation CompilerPassStage = iota Optimisation PreValidation Validation PostValidation Finalization PostFinalization )
type Container ¶
type Container interface { Get(id ID) (any, error) GetByTag(tag TagID) ([]any, error) Has(id ID) bool CallFunction(id ID) error CallFunctions() error HasFunction(id ID) bool Initialised(id ID) bool }
Container is a dependency injection container. It holds definitions of services and is responsible for building and storing instances of services.
type ContainerBuilder ¶ added in v0.3.0
type ContainerBuilder struct {
// contains filtered or unexported fields
}
ContainerBuilder is a builder for Container. It provides a fluent interface to inspect and configure the container. Once Build() is called, this builder is locked and no longer usable. Subsequent calls to Build() will return an error and any other method may panic.
func NewContainerBuilder ¶ added in v0.3.0
func NewContainerBuilder() *ContainerBuilder
func (*ContainerBuilder) AddAliases ¶ added in v0.3.0
func (b *ContainerBuilder) AddAliases(aliases ...Alias) *ContainerBuilder
func (*ContainerBuilder) AddCompilerPass ¶ added in v0.4.0
func (b *ContainerBuilder) AddCompilerPass(stage CompilerPassStage, priority int, pass CompilerPass) *ContainerBuilder
func (*ContainerBuilder) AddDefinitions ¶ added in v0.3.0
func (b *ContainerBuilder) AddDefinitions(definitions ...*Definition) *ContainerBuilder
func (*ContainerBuilder) AddFunctions ¶ added in v0.7.0
func (b *ContainerBuilder) AddFunctions(functions ...*FunctionDefinition)
func (*ContainerBuilder) Build ¶ added in v0.3.0
func (b *ContainerBuilder) Build() (Container, error)
func (*ContainerBuilder) GetAlias ¶ added in v0.3.0
func (b *ContainerBuilder) GetAlias(id ID) (Alias, bool)
func (*ContainerBuilder) GetAliases ¶ added in v0.3.0
func (b *ContainerBuilder) GetAliases() []Alias
func (*ContainerBuilder) GetDefinition ¶ added in v0.3.0
func (b *ContainerBuilder) GetDefinition(id ID) (*Definition, bool)
func (*ContainerBuilder) GetDefinitions ¶ added in v0.3.0
func (b *ContainerBuilder) GetDefinitions() []*Definition
func (*ContainerBuilder) GetFunction ¶ added in v0.7.0
func (b *ContainerBuilder) GetFunction(id ID) (*FunctionDefinition, bool)
func (*ContainerBuilder) GetFunctions ¶ added in v0.7.0
func (b *ContainerBuilder) GetFunctions() []*FunctionDefinition
func (*ContainerBuilder) RemoveAliases ¶ added in v0.3.0
func (b *ContainerBuilder) RemoveAliases(ids ...ID) *ContainerBuilder
func (*ContainerBuilder) RemoveDefinitions ¶ added in v0.3.0
func (b *ContainerBuilder) RemoveDefinitions(ids ...ID) *ContainerBuilder
func (*ContainerBuilder) SetAliases ¶ added in v0.3.0
func (b *ContainerBuilder) SetAliases(aliases ...Alias) *ContainerBuilder
func (*ContainerBuilder) SetDefinitions ¶ added in v0.3.0
func (b *ContainerBuilder) SetDefinitions(definitions ...*Definition) *ContainerBuilder
func (*ContainerBuilder) SetFunctions ¶ added in v0.7.0
func (b *ContainerBuilder) SetFunctions(functions ...*FunctionDefinition)
type Definition ¶ added in v0.3.0
type Definition struct {
// contains filtered or unexported fields
}
Definition describes a service. It stores all information needed to build an instance of a service, and it tells the container how to handle the service.
func NewDefinition ¶ added in v0.3.0
func NewDefinition(id ID, factory *Factory) *Definition
func (*Definition) AddMethodCalls ¶ added in v0.3.0
func (d *Definition) AddMethodCalls(methodCalls ...*Method) *Definition
func (*Definition) AddTags ¶ added in v0.3.0
func (d *Definition) AddTags(tags ...*Tag) *Definition
func (*Definition) GetFactory ¶ added in v0.3.0
func (d *Definition) GetFactory() *Factory
func (*Definition) GetMethodCalls ¶ added in v0.3.0
func (d *Definition) GetMethodCalls() []*Method
func (*Definition) GetTags ¶ added in v0.3.0
func (d *Definition) GetTags() []*Tag
func (*Definition) ID ¶ added in v0.3.0
func (d *Definition) ID() ID
func (*Definition) IsAutowired ¶ added in v0.4.0
func (d *Definition) IsAutowired() bool
func (*Definition) IsLazy ¶ added in v0.3.0
func (d *Definition) IsLazy() bool
func (*Definition) IsPublic ¶ added in v0.3.0
func (d *Definition) IsPublic() bool
func (*Definition) IsShared ¶ added in v0.4.0
func (d *Definition) IsShared() bool
func (*Definition) Of ¶ added in v0.3.0
func (d *Definition) Of() reflect.Type
func (*Definition) RemoveMethodCalls ¶ added in v0.3.0
func (d *Definition) RemoveMethodCalls(names ...string) *Definition
func (*Definition) RemoveTags ¶ added in v0.3.0
func (d *Definition) RemoveTags(ids ...TagID) *Definition
func (*Definition) SetAutowired ¶ added in v0.4.0
func (d *Definition) SetAutowired(autowired bool) *Definition
func (*Definition) SetFactory ¶ added in v0.3.0
func (d *Definition) SetFactory(factory *Factory) *Definition
func (*Definition) SetLazy ¶ added in v0.3.0
func (d *Definition) SetLazy(lazy bool) *Definition
func (*Definition) SetMethodCalls ¶ added in v0.3.0
func (d *Definition) SetMethodCalls(methodCalls ...*Method) *Definition
func (*Definition) SetPublic ¶ added in v0.3.0
func (d *Definition) SetPublic(public bool) *Definition
func (*Definition) SetShared ¶ added in v0.4.0
func (d *Definition) SetShared(shared bool) *Definition
func (*Definition) SetTags ¶ added in v0.3.0
func (d *Definition) SetTags(tags ...*Tag) *Definition
func (*Definition) String ¶ added in v0.3.0
func (d *Definition) String() string
type DefinitionBuilder ¶ added in v0.3.0
type DefinitionBuilder struct {
// contains filtered or unexported fields
}
DefinitionBuilder is a helper for building Definition objects. It offers a fluent interface that does all the heavy lifting for the user. This is the recommended way of building a Definition.
func Svc ¶
func Svc(factory any) *DefinitionBuilder
Svc returns a DefinitionBuilder for a service of type inferred from the passed factory.
func SvcT ¶
func SvcT[T any](factory any) *DefinitionBuilder
SvcT returns a DefinitionBuilder for a service of type defined by the type parameter.
func (*DefinitionBuilder) Args ¶ added in v0.3.0
func (b *DefinitionBuilder) Args(args ...any) *DefinitionBuilder
func (*DefinitionBuilder) Autowired ¶ added in v0.3.0
func (b *DefinitionBuilder) Autowired() *DefinitionBuilder
func (*DefinitionBuilder) Build ¶ added in v0.3.0
func (b *DefinitionBuilder) Build() (*Definition, error)
func (*DefinitionBuilder) Eager ¶ added in v0.3.0
func (b *DefinitionBuilder) Eager() *DefinitionBuilder
func (*DefinitionBuilder) ID ¶ added in v0.3.0
func (b *DefinitionBuilder) ID(id ID) *DefinitionBuilder
func (*DefinitionBuilder) Lazy ¶ added in v0.3.0
func (b *DefinitionBuilder) Lazy() *DefinitionBuilder
func (*DefinitionBuilder) MethodCall ¶ added in v0.3.0
func (b *DefinitionBuilder) MethodCall(name string, args ...any) *DefinitionBuilder
func (*DefinitionBuilder) NotAutowired ¶ added in v0.4.0
func (b *DefinitionBuilder) NotAutowired() *DefinitionBuilder
func (*DefinitionBuilder) NotShared ¶ added in v0.4.0
func (b *DefinitionBuilder) NotShared() *DefinitionBuilder
func (*DefinitionBuilder) Private ¶ added in v0.3.0
func (b *DefinitionBuilder) Private() *DefinitionBuilder
func (*DefinitionBuilder) Public ¶ added in v0.3.0
func (b *DefinitionBuilder) Public() *DefinitionBuilder
func (*DefinitionBuilder) Shared ¶ added in v0.4.0
func (b *DefinitionBuilder) Shared() *DefinitionBuilder
func (*DefinitionBuilder) Tags ¶ added in v0.3.0
func (b *DefinitionBuilder) Tags(tags ...any) *DefinitionBuilder
type Factory ¶ added in v0.3.0
type Factory struct {
// contains filtered or unexported fields
}
Factory represents a function that creates a service.
func NewAutoFactory ¶ added in v0.3.0
NewAutoFactory returns a factory that creates a service of type inferred from the passed function signature.
func NewFactory ¶ added in v0.3.0
func NewFactoryT ¶ added in v0.3.0
NewFactoryT returns a factory that creates a service of type defined in the type parameter.
func (*Factory) GetArgs ¶ added in v0.3.0
func (fn *Factory) GetArgs() FuncArgumentsList
type FuncArgument ¶ added in v0.4.0
type FuncArgument struct {
// contains filtered or unexported fields
}
func NewFuncArgument ¶ added in v0.4.0
func NewFuncArgument(typ reflect.Type, arg Argument) (*FuncArgument, error)
func (FuncArgument) Argument ¶ added in v0.4.0
func (a FuncArgument) Argument() Argument
func (FuncArgument) IsEmpty ¶ added in v0.4.0
func (a FuncArgument) IsEmpty() bool
func (FuncArgument) Type ¶ added in v0.4.0
func (a FuncArgument) Type() reflect.Type
type FuncArgumentsList ¶ added in v0.4.0
type FuncArgumentsList []*FuncArgument
func NewFuncArgumentsList ¶ added in v0.4.0
func NewFuncArgumentsList(fn reflect.Type, args ...Argument) (FuncArgumentsList, error)
func (FuncArgumentsList) Arguments ¶ added in v0.4.0
func (l FuncArgumentsList) Arguments() []Argument
func (FuncArgumentsList) ForEach ¶ added in v0.4.0
func (l FuncArgumentsList) ForEach(fn func(i uint, a *FuncArgument) error) error
func (FuncArgumentsList) Set ¶ added in v0.4.0
func (l FuncArgumentsList) Set(i uint, arg Argument) error
func (FuncArgumentsList) SetAuto ¶ added in v0.4.0
func (l FuncArgumentsList) SetAuto(args ...Argument) error
type Function ¶ added in v0.7.0
type Function struct {
// contains filtered or unexported fields
}
func (*Function) GetArgs ¶ added in v0.7.0
func (fn *Function) GetArgs() FuncArgumentsList
type FunctionDefinition ¶ added in v0.7.0
type FunctionDefinition struct {
// contains filtered or unexported fields
}
func NewFunctionDefinition ¶ added in v0.7.0
func NewFunctionDefinition(id ID, fn *Function) *FunctionDefinition
func (*FunctionDefinition) GetFunction ¶ added in v0.7.0
func (d *FunctionDefinition) GetFunction() *Function
func (*FunctionDefinition) ID ¶ added in v0.7.0
func (d *FunctionDefinition) ID() ID
func (*FunctionDefinition) IsAutowired ¶ added in v0.7.0
func (d *FunctionDefinition) IsAutowired() bool
func (*FunctionDefinition) SetAutowired ¶ added in v0.7.0
func (d *FunctionDefinition) SetAutowired(autowired bool)
func (*FunctionDefinition) String ¶ added in v0.7.0
func (d *FunctionDefinition) String() string
type FunctionDefinitionBuilder ¶ added in v0.7.0
type FunctionDefinitionBuilder struct {
// contains filtered or unexported fields
}
func (*FunctionDefinitionBuilder) Build ¶ added in v0.7.0
func (b *FunctionDefinitionBuilder) Build() (*FunctionDefinition, error)
type InterfaceResolutionPass ¶ added in v0.3.0
type InterfaceResolutionPass struct{}
InterfaceResolutionPass resolves interfaces to their implementations. It inspects arguments of factories, method calls and functions of all definitions. If those arguments are interfaces, it tries to find a single implementation of that interface. If there is exactly one implementation, it creates an alias for that implementation, which allows the container to use it for instantiation.
func (InterfaceResolutionPass) Compile ¶ added in v0.3.0
func (p InterfaceResolutionPass) Compile(builder *ContainerBuilder) error
type Method ¶ added in v0.3.0
type Method struct {
// contains filtered or unexported fields
}
Method represents a method of a service.
func (*Method) GetArgs ¶ added in v0.3.0
func (fn *Method) GetArgs() FuncArgumentsList
type OptionsFunc ¶ added in v0.3.0
type OptionsFunc func(opt *getOptions)
func WithID ¶
func WithID(id ID) OptionsFunc
WithID returns an OptionsFunc that sets the ID of the service to get.
type Reference ¶ added in v0.3.0
type Reference struct {
// contains filtered or unexported fields
}
Reference represents a dependency on another service. It is resolved by the container and must point at a valid service ID.
type TaggedCollection ¶ added in v0.3.0
type TaggedCollection struct {
// contains filtered or unexported fields
}
TaggedCollection represents a dependency on a collection of services tagged with a specific tag. It is resolved by the container and may be empty.
func NewTaggedCollection ¶ added in v0.3.0
func NewTaggedCollection(tag TagID, typ reflect.Type) *TaggedCollection
func (TaggedCollection) String ¶ added in v0.3.0
func (t TaggedCollection) String() string
func (TaggedCollection) Type ¶ added in v0.3.0
func (t TaggedCollection) Type() reflect.Type