Skip to Content

gofasta g provider

Generates a Google Wire  provider set file that defines how a resource’s dependencies are wired together. The provider set binds interfaces to implementations for the repository, service, and controller layers. It also patches container.go and wire.go to register the new provider.

Usage

gofasta g provider <Name>

This command has no flags.

Examples

Generate a provider for a Product resource:

gofasta g provider Product

What It Generates

Running gofasta g provider Product creates one file and patches two:

FileDescription
app/di/providers/product.goWire DI provider set (created)
app/di/container.goAdds resource fields (patched)
app/di/wire.goAdds ProductSet to Wire build (patched)

Generated Code

// app/di/providers/product.go package providers import ( "github.com/google/wire" "myapp/app/repositories" repoInterfaces "myapp/app/repositories/interfaces" "myapp/app/services" svcInterfaces "myapp/app/services/interfaces" "myapp/app/rest/controllers" ) var ProductSet = wire.NewSet( // Repository repositories.NewProductRepository, wire.Bind(new(repoInterfaces.ProductRepository), new(*repositories.ProductRepositoryImpl)), // Service services.NewProductService, wire.Bind(new(svcInterfaces.ProductService), new(*services.ProductServiceImpl)), // Controller controllers.NewProductController, )

How Wire Providers Work

Each provider set uses three Wire constructs:

ConstructPurpose
Constructor function (e.g., NewProductRepository)Tells Wire how to create an instance
wire.Bind(interface, implementation)Tells Wire which concrete type satisfies an interface
wire.NewSet(...)Groups related providers into a reusable set

The provider set is referenced in app/di/wire.go:

//go:build wireinject package di import ( "github.com/google/wire" "myapp/app/di/providers" ) func InitializeContainer() (*Container, error) { wire.Build( providers.UserSet, providers.AuthSet, providers.ProductSet, // Added by scaffold or manually wire.Struct(new(Container), "*"), ) return nil, nil }
Last updated on