- service层声明接口需要以XxxService方式命名,接口实现需要xxxServiceImpl方式命名
- repository层声明接口需要以XxxRepository方式命名,接口实现需要xxxRepositoryImpl方式命名
- cache层声明接口需要以XxxCache方式命名,接口实现需要xxxCacheImpl方式命名
- grpc层声明struct需要以xxxGrpcServer方式命名
- http层声明struct需要以xxxHttpServer方式命名
通过配置结构体标签来指定注入哪些对象
type productServiceImpl struct {
productRepository repository.ProductRepository `autowire:""`
storeCache cache.StoreCache `autowire:""`
productDb *gorm.DB `autowire:"product-center"`
}
情况1: 根据数据类型来注入,找不到实例注入对象就会报错
type productServiceImpl struct {
productRepository repository.ProductRepository `autowire:""`
}
情况2: 在多个相同数据类型情况下,根据bean名称来注入,找不到实例注入对象就会报错
type productServiceImpl struct {
productDb *gorm.DB `autowire:"product-center"`
}
情况3: 容器中存在就注入,不存在就不注入
type productServiceImpl struct {
storeCache cache.StoreCache `autowire:"?"`
}
通过gs.Provide()来注册,第一个参数是实例化方法,后面是实例化方法参数 比如:NewProductService("zihua")
func init() {
gs.Provide(NewProductService,"zihua")
}
通过gs.Object()来注册
func init() {
gs.Object(new(greeterGrpcServer)).Init(func(s *greeterGrpcServer) {
gs.GrpcServer("helloworld.Greeter", &grpc.Server{
Register: helloworld.RegisterGreeterServer,
Service: s,
})
})
}
先安装proto生成工具
https://docs.buf.build/installation
执行生成pb文件
buf generate