将 IHttpClientFactory 传递给 .NET Standard 类库



在新的 ASP.NET Core 2.1中有一个非常酷的IHttpClientFactory功能 https://www.hanselman.com/blog/HttpClientFactoryForTypedHttpClientInstancesInASPNETCore21.aspx

我正在尝试在我的 ASP.NET Core 2.1 预览版-2 应用程序中使用此功能,但我需要在 .NET Standard 2.0 中的类库中使用该HttpClient

Startup.cs中执行AddHttpClientConfigureServices()后,如何将此HttpClientFactory或特定的命名HttpClient传递给我在 .NET Standard 2.0 类库中创建的 API 客户端?这个客户端几乎可以处理我对第三方的所有 API 调用。

基本上,我只是想将特定的命名HttpClient放入我的thirdPartyApiClient中。

这是我在ConfigureServices()的代码:

public void ConfigureServices(IServiceCollection services)
{
// Create HttpClient's
services.AddHttpClient("Api123Client", client =>
{
client.BaseAddress = new Uri("https://api123.com/");
client.DefaultRequestHeaders.Add("Accept", "application/json");
});
services.AddHttpClient("Api4567Client", client =>
{
client.BaseAddress = new Uri("https://api4567.com/");
client.DefaultRequestHeaders.Add("Accept", "application/json");
});
}

现在有一个NuGet包Microsoft.Extensions.Http提供IHttpClientFactory到.NET Standard 2.0

首先,库类的构造函数应该采用HttpClient参数,以便您可以向其注入HttpClient。然后,最简单的方法(在链接文章中也提到了它的价值)是简单地为该库类添加一个特定的HttpClient

services.AddHttpClient<MyLibraryClass>(...);

然后,当然,注册库类进行注入,如果您还没有:

services.AddScoped<MyLibraryClass>();

然后,当您的库类被实例化以注入到某些东西中时,它也将被注入您为其指定的HttpClient

或者,您可以手动指定要通过以下方式注入的HttpClient实例:

services.AddScoped(p => {
var httpClientFactory = p.GetRequiredService<IHttpClientFactory>();
return new MyLibraryClass(httpClientFactory.Create("Foo"));
});

相关内容

  • 没有找到相关文章

最新更新