我有一个GrpcService类,它在其构造函数中接收gRPC客户端,如下所示:
public class GrpcService : IService
{
private readonly GrpcClient grpcClient;
public GrpcService(GrpcClient grpcClient)
{
this.grpcClient = grpcClient;
}
//...
}
我已经使用通用的AddGrpcClient扩展方法在Startup类中注册了gRPC客户端:
services.AddGrpcClient<GrpcClient>(o =>
{
o.Address = new Uri("https://localhost:5001");
});
现在我想将GrpcService类注入到API控制器中。我的问题是;在Startup类中注册GrpcService的正确方法是什么?
我确实尝试了以下操作,但没有成功:
services.AddGrpcClient<GrpcService>();
目前我有以下代码,它运行良好:
services.AddSingleton<IService, GrpcService>();
然而,我不确定使用singleton是否是正确的生存期,特别是当gRPC客户端在内部使用HttpClient时?
根据MS文档,这将是一个单例。
你要找的是这里
如果将services.AddGrpcClient<GrpcService>();
更改为services.AddGrpcClient<GrpcClient>();
,并在使用者构造函数中注入GrpcClient
,它应该可以工作。