将 IHttpClientFactory 传递给 .NET Standard class 库
Passing IHttpClientFactory to .NET Standard class library
新的 ASP.NET Core 2.1 中有一个非常酷的 IHttpClientFactory
功能
https://www.hanselman.com/blog/HttpClientFactoryForTypedHttpClientInstancesInASPNETCore21.aspx
我正在尝试在我的 ASP.NET Core 2.1 Preview-2 应用程序中使用此功能,但我需要在我的 class 库中使用 HttpClient
,这些库位于 .NET 中标准 2.0
一旦我在 Startup.cs
中执行 ConfigureServices()
中的 AddHttpClient
,我如何将此 HttpClientFactory
或特定命名的 HttpClient
传递给 API 我在 .NET Standard 2.0 class 库中创建的客户端?该客户端几乎可以处理我向第三方发出的所有 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");
});
}
首先,您的库 class' 构造函数应该采用 HttpClient
参数,因此您可以将 HttpClient
注入其中。然后,最简单的方法(在 link 文章中提到以及它的价值)是简单地为该库添加一个特定的 HttpClient
class:
services.AddHttpClient<MyLibraryClass>(...);
然后,当然,注册您的库 class 以进行注入,如果您还没有:
services.AddScoped<MyLibraryClass>();
然后,当您的库 class 被实例化以注入到某些东西中时,它也会注入您为其指定的 HttpClient
。
或者,您可以手动指定一个 HttpClient
实例以通过以下方式注入:
services.AddScoped(p => {
var httpClientFactory = p.GetRequiredService<IHttpClientFactory>();
return new MyLibraryClass(httpClientFactory.Create("Foo"));
});
现在有一个 NuGet 包 Microsoft.Extensions.Http
为 .NET Standard 2.0 提供 IHttpClientFactory
新的 ASP.NET Core 2.1 中有一个非常酷的 IHttpClientFactory
功能
https://www.hanselman.com/blog/HttpClientFactoryForTypedHttpClientInstancesInASPNETCore21.aspx
我正在尝试在我的 ASP.NET Core 2.1 Preview-2 应用程序中使用此功能,但我需要在我的 class 库中使用 HttpClient
,这些库位于 .NET 中标准 2.0
一旦我在 Startup.cs
中执行 ConfigureServices()
中的 AddHttpClient
,我如何将此 HttpClientFactory
或特定命名的 HttpClient
传递给 API 我在 .NET Standard 2.0 class 库中创建的客户端?该客户端几乎可以处理我向第三方发出的所有 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");
});
}
首先,您的库 class' 构造函数应该采用 HttpClient
参数,因此您可以将 HttpClient
注入其中。然后,最简单的方法(在 link 文章中提到以及它的价值)是简单地为该库添加一个特定的 HttpClient
class:
services.AddHttpClient<MyLibraryClass>(...);
然后,当然,注册您的库 class 以进行注入,如果您还没有:
services.AddScoped<MyLibraryClass>();
然后,当您的库 class 被实例化以注入到某些东西中时,它也会注入您为其指定的 HttpClient
。
或者,您可以手动指定一个 HttpClient
实例以通过以下方式注入:
services.AddScoped(p => {
var httpClientFactory = p.GetRequiredService<IHttpClientFactory>();
return new MyLibraryClass(httpClientFactory.Create("Foo"));
});
现在有一个 NuGet 包 Microsoft.Extensions.Http
为 .NET Standard 2.0 提供 IHttpClientFactory