Dependency Injection
Copper uses
google/wire
to enable dependency injection. Check out the introductory blog post to learn more about dependency injection and Wire.In a Copper project, each package has a
wire.go
file. This file is autogenerated if you use the Copper CLI to create your package directories.$ copper scaffold:pkg <package>
Let's say you have the following struct that requires
rockets.Queries
and clogger.Logger
for its methods.type Launcher struct {
rockets *rockets.Queries
logger clogger.Logger
}
func (l *Launcher) Launch(ctx context.Context, rocketID string) error {
// ...
}
To enable automating wiring up of all dependencies, create a constructor for the
Launcher
struct.func NewLauncher(r *rockets.Queries, l clogger.Logger) *Launcher {
return &Launcher{
rockets: r,
logger: l,
}
}
Finally, add the constructor to the package's
WireModule
defined in the wire.go
file.var WireModule = wire.NewSet(
NewLauncher,
)
That's it! Copper + Wire will automatically pass in the correct dependencies to the
NewLauncher
constructor.Last modified 10mo ago