Weld is a golang package that contains directives for "state and backends" dependency injection using compile time code generation.
Weld is heavily based on github.com/google/wire, borrowing its syntax and concepts, but tailoring it for backends-based dependency injection pattern.
Unlike wire, weld:
- Supports multiple providers for the same type by selecting the first provider found in the set using depth-first search.
- Supports transitive "backends-type" cyclic dependencies by adding these interfaces to the generated implementation.
- Is much less dynamic & has fewer features: it takes a provider set as input and a backends as output and generates a
Make
function that returns an implementation of that backends interface.
For convenience it can also generate an aggregate Backends interface from the union of a slice of backends since golang doesn't support embedding interfaces with the same name or overlapping methods.
- Supported functions and types:
wire.Bind
wire.Binding
wire.NewSet
wire.ProviderSet
- Unsupported functions and types:
wire.Build
wire.FieldsOf
wire.InterfaceValue
wire.Struct
wire.Value
- See the internal/testdata/example project for how this is used.