C # универсальный параметр типа класса как тип аргумента метода для сгенерированного GRPC класса - PullRequest
0 голосов
/ 06 октября 2019

У меня есть следующий интерфейс:

interface IGrpcClient<TMessage>
{
    Task Handle(TMessage message);
}

и класс реализации:

class GrpcClient<TMessage> : IGrpcClient<TMessage>
{
    public async Task Handle(TMessage message)
    {
        GrpcGreeter.HelloReply response = await _client.SayHelloAsync(message);
    }
}

и я попытался передать объект IMessage из Progam.cs в метод:

await grpcClient.Handle(new HelloRequest() {Name = "Donald Trump"});

приводит к следующей ошибке компиляции:

GrpcClient.cs(27,75): error CS1503: Argument 1: cannot convert from 'TMessage' to 'GrpcGreeter.HelloRequest' [/usr/src/GRPC/Greeter/src/GrpcClient/GrpcClient.csproj]

HellloRequest, то есть TMessage, автоматически генерируется из файла .proto с использованием .Net Core 3.0.

Что мне не хватает? Любой совет и понимание приветствуется.

Автоматически сгенерированная функция:

public virtual grpc::AsyncUnaryCall<global::GrpcGreeter.HelloReply> SayHelloAsync(global::GrpcGreeter.HelloRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
{
    return SayHelloAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
}
public virtual grpc::AsyncUnaryCall<global::GrpcGreeter.HelloReply> SayHelloAsync(global::GrpcGreeter.HelloRequest request, grpc::CallOptions options)
{
    return CallInvoker.AsyncUnaryCall(__Method_SayHello, null, options, request);
}
...