GitHub - d3fvxl/di: 🛠A full-featured dependency injection container for go programming language. (original) (raw)
DI
DI is a dependency injection library for the Go programming language.
Dependency injection is a form of inversion of control that increases modularity and extensibility in your programs. This library helps you organize responsibilities in your codebase and makes it easy to combine low-level implementations into high-level behavior without boilerplate.
Features
- Intuitive auto wiring
- Interface implementations
- Constructor injection
- Optional injection
- Field injection
- Lazy-loading
- Tagging
- Grouping
- Iteration
- Decoration
- Cleanup
- Container Chaining / Scopes
Installation
go get github.com/defval/di
Documentation
You can use the standard pkg.go.dev and inline code comments. If you are new to auto-wiring libraries such as google/wireor uber-go/dig, start with the tutorial.
Essential Reading
Example Usage
package main
import ( "context" "fmt" "log" "net/http" "os" "os/signal" "syscall"
"github.com/defval/di")
func main() { di.SetTracer(&di.StdTracer{}) // create container c, err := di.New( di.Provide(NewContext), // provide application context di.Provide(NewServer), // provide http server di.Provide(NewServeMux), // provide http serve mux // controllers as []Controller group di.Provide(NewOrderController, di.As(new(Controller))), di.Provide(NewUserController, di.As(new(Controller))), ) // handle container errors if err != nil { log.Fatal(err) } // invoke function if err := c.Invoke(StartServer); err != nil { log.Fatal(err) } }
Full code available here.
Questions
If you have any questions, feel free to create an issue.