c# - 如何将 HttpClientFactory 与 AutoRest 生成的客户端一起使用

标签 c# asp.net-core dependency-injection autorest httpclientfactory

AutoRest 生成的客户端没有合适的构造函数来与 services.AddHttpClient() 方法一起使用。那么我们如何解决这个问题呢?

现在我们有了带有这种签名的公共(public)构造函数。

public Client(ServiceClientCredentials credentials, HttpClient httpClient, bool disposeHttpClient) : this(httpClient, disposeHttpClient)

但是因为它有 bool disposeHttpClient 参数,我们不能直接在 AddHttpClient() 方法中使用它来将客户端服务配置到 DI 中。 令我深感遗憾的是,HttpClientFactory 不包含具有此类签名的方法 AddHttpClient 的覆盖版本:

AddHttpClient<IClient>(Func<IServiceProvider, HttpClietn, IClient> configClient)

最佳答案

您需要使用命名客户端,而不是类型化客户端,然后您需要使用工厂重载注册您的 AutoRest 客户端。

services.AddHttpClient("MyAutoRestClient", c =>
{
    // configure your HttpClient instance
});

services.AddScoped<MyAutoRestClient>(p =>
{
    var httpClient = p.GetRequiredService<IHttpClientFactory>().GetClient("MyAutoRestClient");
    // get or create any other dependencies
    // set disposeHttpClient to false, since it's owned by the service collection
    return new MyAutoRestClient(credentials, httpClient, false);
});

关于c# - 如何将 HttpClientFactory 与 AutoRest 生成的客户端一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112120/

相关文章:

c# - asp.net:点击运行javascript?

c# - 未记录的 Windows 内置 PDF 渲染器功能?

asp.net-core - 对 ASP.NET Core 使用远程验证

c# - 如何向 Swagger 添加健康检查

javascript - Angularjs 缩小使用 grunt uglify 导致 js 错误

C#-WPF : testing strategies

c# - 如何在我的.Net Framework项目中添加对Windows运行时组件(C++/WinRT)的引用

c# - Visual Studio 2017 Docker 支持不适用于 ASP.Net Core Angular 或 React 项目

perl - Moose 类的依赖注入(inject)

asp.net-mvc - 无法获得有效的 Unity session 生命周期管理器,ASP.NET MVC5