grpc - 如何在不使用具体实例的情况下创建 dotnet gRPC 服务器
问题描述
所以我正在尝试构建一个同时具有 REST 和 gRPC 的 .Net Core 应用程序。
预期结果:运行一个应用程序,该应用程序支持一个端口上的工作 REST 和另一个端口上的 gRPC。
REST 很简单。这是应用程序开始的地方。但是要配置 gRPC 的端口,我看到我需要创建一个服务器实例:
Server server = new Server
{
Services = { Greeter.BindService(new GreeterImpl()) }
Ports = { new ServerPort("0.0.0.0", 5001, ServerCredentials.Insecure) }
};
server.Start();
这一切都很好,直到我们真正使用它,并且像任何其他“控制器”GreeterImpl 一样需要服务的依赖注入:
private readonly IExampleService _exampleService;
public GreeterImpl (IExampleService exampleService)
{
_exampleService = exampleService;
}
现在第一个代码片段将不起作用,因为“new GreeterImpl()”需要一个 IExampleService。我在网上搜索了如何在不使用具体实现的情况下获取 ServerServiceDefinition (从 Greeter.BindService() 返回的东西),但一无所获。那么,这应该怎么做呢,还是我走上了完全错误的道路?
解决方案
所以,我的想法是错误的。打开我们的你可以使用
app.ApplicationServices.GetService(typeof({YOUR_SERVICE}))
其中“app”是“IApplicationBuilder”然后只需在“.BindService()”中使用生成的服务。最后,我们不更改“.BindService()”,而是将其传递给一个工作服务以进行绑定。
重要提示:您必须先注册您的服务。就我而言,我使用 AutoFac 注册它
推荐阅读
- python-3.x - Python:如何标记每种类型的 URL 路径?
- redis - 如何将ioredis连接到谷歌云功能?
- python - 如何在 python 安装包中包含文本文件?
- drop-down-menu - 响应式 Bootstrap 4 导航栏下拉项目显示为导航项目
- python - 在函数内部使用函数,输入发生两次,一次是需要的
- c++ - C++ 使用成员对象的 Setter
- java - 无法在 JPA 查询中应用 where 条件子句
- javascript - JavaScript - 在不同时间触发多个事件的最佳方法
- python - 已定义“名称未定义”时出现错误
- spring-kafka - 通过外部触发器寻找偏移量