向宁 42addaea7d feat: add Wire DI and rewrite main.go as Kratos app entry point
- 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
2026-05-25 13:12:18 +08:00

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,
))
}