package main
import (
"fmt""github.com/TsvetanMilanov/go-simple-di/di"
)
// struct with named and unnamed dependencies.typerootstruct {
Nested*nested`di:""`Named*named`di:"name=someName"`
}
// struct with interface dependency.typenestedstruct {
Wworker`di:""`
}
typenamedstruct {
namestring
}
typeworkerinterface {
Work() string
}
typebuilderstruct {
workstring
}
func (b*builder) Work() string {
returnb.work
}
funcmain() {
// create the dependencies.r:=&root{}
nam:=&named{name: "named"}
nes:=&nested{}
b:=&builder{work: "Build"}
// create the di container and add all dependencies to it.c:=di.NewContainer()
err:=c.Register(
&di.Dependency{Value: r},
&di.Dependency{Value: nam, Name: "someName"}, // register the named dependency with the same name as in the struct definition.&di.Dependency{Value: nes},
&di.Dependency{Value: b},
)
iferr!=nil {
panic(err)
}
// resolve all registered dependencieserr=c.ResolveAll()
iferr!=nil {
panic(err)
}
// use the resolved dependenciesfmt.Println("Worker: ", r.Nested.W.Work())
fmt.Println("Named: ", r.Named.name)
}