首页 > 解决方案 > 如何在不使用具体实例的情况下创建 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() 返回的东西),但一无所获。那么,这应该怎么做呢,还是我走上了完全错误的道路?

标签: grpcgrpc-dotnet

解决方案


所以,我的想法是错误的。打开我们的你可以使用

app.ApplicationServices.GetService(typeof({YOUR_SERVICE}))

其中“app”是“IApplicationBuilder”然后只需在“.BindService()”中使用生成的服务。最后,我们不更改“.BindService()”,而是将其传递给一个工作服务以进行绑定。

重要提示:您必须先注册您的服务。就我而言,我使用 AutoFac 注册它


推荐阅读