kratos-wire-provider
Manages Wire dependency injection providers in go-kratos microservices. Adds constructors to ProviderSets and regenerates Wire code. Use when integrating new components into dependency injection.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
<quick_start> To add a provider to the biz layer:
-
Add to ProviderSet in
internal/biz/biz.go:
var ProviderSet = wire.NewSet(
NewSymbolValidator,
NewSymbolUseCase,
NewProductUseCase, // Add your constructor
)
- Regenerate Wire code:
cd services/{service-name}
make generate
</quick_start>
<provider_sets>
ProviderSet Locations
Data Layer (internal/data/data.go):
- Repository implementations
- Database connection
- Transaction manager
var ProviderSet = wire.NewSet(
NewData, // Database setup
NewTransaction, // Transaction manager
repo.NewSymbolRepo,
repo.NewProductRepo,
)
Business Layer (internal/biz/biz.go):
- Use cases
- Validators
var ProviderSet = wire.NewSet(
NewSymbolValidator,
NewSymbolUseCase,
NewProductUseCase,
)
Service Layer (internal/service/service.go):
- Service handlers
var ProviderSet = wire.NewSet(
NewSymbolService,
NewProductService,
)
Server Layer (internal/server/server.go):
- HTTP and gRPC servers
var ProviderSet = wire.NewSet(
NewHTTPServer,
NewGRPCServer,
)
</provider_sets>
<wire_process>
Wire Generation Process
File: cmd/{service}/wire.go defines dependencies:
//go:build wireinject
func InitApp(*conf.Server, *conf.Data, log.Logger) (*App, error) {
wire.Build(
server.ProviderSet,
service.ProviderSet,
biz.ProviderSet,
data.ProviderSet,
newApp,
)
return &App{}, nil
}
Generated: cmd/{service}/wire_gen.go (auto-generated, never edit)
Command: make generate runs:
GOWORK=off go generate ./cmd/{service}/...
</wire_process>
<ordering_rules>
Provider Ordering
Within ProviderSet:
- Alphabetical order (recommended)
- OR grouped by functionality
- Be consistent with existing pattern
Between ProviderSets (in wire.Build):
-
server.ProviderSet(outermost layer) -
service.ProviderSet -
biz.ProviderSet -
data.ProviderSet(innermost layer) -
newApp(application constructor) </ordering_rules>
<common_tasks>
Common Tasks
Add new repository:
- Add constructor to
data.ProviderSet - Run
make generate
Add new use case:
- Add constructor to
biz.ProviderSet - Run
make generate
Add new service handler:
- Add constructor to
service.ProviderSet - Run
make generate
Troubleshooting:
- If Wire errors, check constructor signatures match interface returns
- Ensure all dependencies are provided in ProviderSets
- Check for circular dependencies
- Run
GOWORK=off go mod tidyif module issues </common_tasks>
<wire_annotations>
Wire Annotations
Optional: Use Wire build tags for conditional providers:
//go:build wireinject
// +build wireinject
Providers must:
- Return types that match interface declarations
- Have all parameters available in dependency graph
- Not create circular dependencies </wire_annotations>
<success_criteria> Wire integration is successful when:
- Constructor added to appropriate ProviderSet
- Alphabetical/consistent ordering maintained
-
make generatecompletes without errors -
wire_gen.goupdated successfully - Service compiles:
make build - Tests pass:
make test - No circular dependency errors </success_criteria>
<error_messages>
Common Wire Errors
"no provider found for X": → Add constructor for X to appropriate ProviderSet
"cycle in dependency graph": → Circular dependency detected, refactor to break cycle
"provider returns interface but is not implemented": → Check constructor returns interface type, struct implements all methods
"multiple providers for type": → Same type provided by multiple constructors, remove duplicate </error_messages>
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-01-20
- Mise à jour de l’index
- 2026-01-26
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!