gRPC 服务使用库中的模型

gRPC Service use models from library

我正在开发我的第一个 gRPC 服务。我一切正常。比如,我可以从客户端调用我的服务并获得响应。我的问题是我的 gRPC 服务可以使用来自另一个库的模型吗?

我的解决方案中有几个项目。

gRPC 服务器
gRPC 客户端
通用 DTO 库
还有一些

当我定义原型文件时,是否可以使用通用 DTO 库中的 类?

my.proto

syntax = "proto3";

option csharp_namespace = "myNameSpace";

package myPackageName;

// The service definition.
service MyService{
  rpc MyMethodName (DtoFromAnotherLibrary) returns (byte[]);
}

谢谢, 特拉维斯

这是不可能的,因为 Proto 不知道您的 C# 项目。

不过,您可以考虑使用 code-first gRPC,在其中编写 C# 代码,然后创建您的原型。

正如@Ray 所说,您不能通过 gRPC 接口使用您的模型对象,他为 code-first 方法提供了一个 link。

我倾向于将我的原型定义视为我的外部接口,并小心地更新它们以确保在接口老化时向后兼容。因此,我将编写与 gRPC 定义分开的模型对象并编写扩展方法(ToProto 用于模型,ToModel 用于 gRPC 消息)以在两种类型之间来回切换。这看起来像是重复的工作,但能够灵活地向我的模型对象添加内容,例如 属性 更改通知,或其他便利 methods/properties 而不会影响外部接口,这对我来说是一个优势。我花很多时间在前端工作,所以它类似于model/view模型关系。