- Create wire.go with interface bindings (biz interfaces → data implementations) - Rewrite main.go to use Kratos config loading + Wire-generated initApp - Remove temporary deps.go pinning file - Wire generates complete dependency graph: config → data → biz → service → server → app
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
//go:build wireinject
|
|
|
|
package main
|
|
|
|
import (
|
|
"rag/file-system/internal/biz"
|
|
"rag/file-system/internal/conf"
|
|
"rag/file-system/internal/data"
|
|
"rag/file-system/internal/server"
|
|
"rag/file-system/internal/service"
|
|
|
|
"github.com/go-kratos/kratos/v2"
|
|
"github.com/go-kratos/kratos/v2/log"
|
|
"github.com/go-kratos/kratos/v2/transport/grpc"
|
|
"github.com/go-kratos/kratos/v2/transport/http"
|
|
"github.com/google/wire"
|
|
)
|
|
|
|
// newApp creates a new Kratos application with HTTP and gRPC servers.
|
|
func newApp(logger log.Logger, hs *http.Server, gs *grpc.Server) *kratos.App {
|
|
return kratos.New(
|
|
kratos.Name("file-system"),
|
|
kratos.Logger(logger),
|
|
kratos.Server(hs, gs),
|
|
)
|
|
}
|
|
|
|
// newConfServer extracts the Server config from Bootstrap.
|
|
func newConfServer(bc *conf.Bootstrap) *conf.Server {
|
|
return bc.GetServer()
|
|
}
|
|
|
|
// newConfData extracts the Data config from Bootstrap.
|
|
func newConfData(bc *conf.Bootstrap) *conf.Data {
|
|
return bc.GetData()
|
|
}
|
|
|
|
// initApp wires up the entire dependency graph.
|
|
func initApp(*conf.Bootstrap, log.Logger) (*kratos.App, func(), error) {
|
|
panic(wire.Build(
|
|
// Config extraction
|
|
newConfServer,
|
|
newConfData,
|
|
|
|
// Provider sets from each layer
|
|
data.ProviderSet,
|
|
biz.ProviderSet,
|
|
service.ProviderSet,
|
|
server.ProviderSet,
|
|
|
|
// Interface bindings: biz interfaces → data implementations
|
|
wire.Bind(new(biz.FileRepo), new(*data.FileRepo)),
|
|
wire.Bind(new(biz.FolderRepo), new(*data.FolderRepo)),
|
|
wire.Bind(new(biz.FileMetaRepo), new(*data.FileMetaRepo)),
|
|
wire.Bind(new(biz.FileMetaRepoForShare), new(*data.FileMetaRepo)),
|
|
wire.Bind(new(biz.ShareRepo), new(*data.ShareRepo)),
|
|
|
|
// App constructor
|
|
newApp,
|
|
))
|
|
}
|