1

我正在使用 protobuf-net 使用 Grpc 构建 Web Assembly Blazor 来处理服务。我正在尝试以这种方式注入我想要的服务:

builder.Services.AddSingleton(typeof(ICustomerService), services =>
        {
            // Create a gRPC-Web channel pointing to the backend server
            var httpClient = new HttpClient(new GrpcWebHandler(GrpcWebMode.GrpcWeb, new HttpClientHandler()));
            var channel = Grpc.Net.Client.GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions { HttpClient = httpClient });

            // Now we can instantiate gRPC clients for this channel
            return channel.CreateGrpcService<ICustomerService>();
        });

然后,我将我认为应该是依赖项的内容注入到 razor 组件中:

[Inject] ICustomerService Client { get; set; }

但我得到这个错误:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer [100] 未处理的异常呈现组件:无法为“Customer_Create”类型的属性“客户端”提供值。没有“ICustomerService”类型的注册服务。

非常感谢这里的任何帮助!

4

1 回答 1

3

我没有在 blazor 中专门尝试过,但总的来说:您正在寻找客户端工厂支持,它的工作方式与此处记录的完全相同,只是您使用以下AddCodeFirstGrpcClient方法注册:

services.AddCodeFirstGrpcClient<IMyService>(o =>
{
    o.Address = new Uri("...etc...");
});
于 2020-07-03T06:07:15.747 回答