Как внедрить зависимости в Blazor Web Assembly с помощью Grpc и protobuf-net

Я создаю Blazor веб-сборки с Grpc, используя protobuf-net для обработки сервисов. Я пытаюсь внедрить службу, которую хочу следующим образом:

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>();
        });

Затем я ввожу то, что, по моему мнению, должно быть зависимостью в компонент бритвы:

[Inject] ICustomerService Client { get; set; }

Но я получаю такую ​​ошибку:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer [100] Компонент визуализации необработанного исключения: не может предоставить значение для свойства «Клиент» для типа «Customer_Create». Не существует зарегистрированной службы типа «ICustomerService».

Любая помощь здесь очень ценится!


person paburgos    schedule 02.07.2020    source источник


Ответы (1)


Я не пробовал это специально в blazor, но в целом: вы ищете Client Factory, которая работает точно так же, как описано здесь, за исключением того, что вы регистрируетесь с помощью метода AddCodeFirstGrpcClient:

services.AddCodeFirstGrpcClient<IMyService>(o =>
{
    o.Address = new Uri("...etc...");
});
person Marc Gravell    schedule 03.07.2020