grpc服务器go中的依赖注入
假设我们有一个包含grpc服务器实现的GOAPI 此grpc服务器方法必须执行各种任务,这些任务需要在同一api中抽象为不同的服务 是否有办法将此新服务注入grpc服务器 示例代码:grpc服务器go中的依赖注入,go,dependency-injection,grpc,Go,Dependency Injection,Grpc,假设我们有一个包含grpc服务器实现的GOAPI 此grpc服务器方法必须执行各种任务,这些任务需要在同一api中抽象为不同的服务 是否有办法将此新服务注入grpc服务器 示例代码: package grpcserver func (g *GrpcServer) GrpcServerExample(ctx context.Context, r *grpcpackage.SampleGrpcRequest) (*grpcpackage.SampleGrpcResponse, error) {
package grpcserver
func (g *GrpcServer) GrpcServerExample(ctx context.Context, r *grpcpackage.SampleGrpcRequest) (*grpcpackage.SampleGrpcResponse, error) {
service := differentService{} //how to inject this instead of creating here
result := service.DoSomething()
return nil,nil
}
您可以在注册gRPC服务器时将服务注入
GrpcServer
package grpcserver
type GrpcServer struct {
MyService Service
}
func (g *GrpcServer) GrpcServerExample(ctx context.Context, r *grpcpackage.SampleGrpcRequest) (*grpcpackage.SampleGrpcResponse, error) {
service := g.MyService
result := service.DoSomething()
return nil,nil
}
func main() {
s := grpcpackage.NewServer()
grpcpackage.RegisterGrpcServer(s, &GrpcServer{
// Inject Here
MyService: &ServiceImpl{},
})
}
服务接口.go
package grpcserver
type Service interface {
DoSomething() int
}
执行服务
package grpcserver
type ServiceImpl struct {
}
func (s *ServiceImpl) DoSomething() int {
return 123
}
如果您正在用相同的API抽象某些东西,为什么不传递接口呢?然而,如果两个组件做两件根本不同的事情,我认为抽象不是前进的方向。不同的东西由不同的组件处理,而不是由抽象层处理…@EliasVanOotegem我不想把它放在proto文件中
GrpcServerExample
的服务定义中,因为differentService
是api内部的。还有别的办法吗?