Skip to content
/ weld Public

Dependency injection using compile time code generation

License

Notifications You must be signed in to change notification settings

luno/weld

Repository files navigation

Quality Gate Status Coverage Bugs Security Rating Vulnerabilities Duplicated Lines (%) Go Report Card GoDoc

Weld

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.

Relation to wire syntax:

  • 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

Example

About

Dependency injection using compile time code generation

Topics

Resources

License

Stars

Watchers

Forks

Languages