我正在使用。net Framework 4.7.2,我试图使用IHttpClientFactory
来创建HttpClient
实例。
我下载了Microsoft.Extensions.Http
v7 NuGet包,现在可以访问System.Net.Http.HttpClientFactory
了。
我是要使用HttpClientFactory.Create()
来创建HttpClient
s吗?
或者我必须使用DI和IHttpClientFactory
吗?
HttpClientFactory
是用来做什么的,为什么不实现IHttpClientFactory
?
我已经检查了DefaultHttpClientFactory
的源代码,尽管它是Microsoft.Extensions.Http
名称空间的一部分,但它被标记为internal
。
很高兴AddHttpClient
扩展方法可以代表我们为上面的类做DI注册。
services.TryAddSingleton<DefaultHttpClientFactory>();
services.TryAddSingleton<IHttpClientFactory>(serviceProvider => serviceProvider.GetRequiredService<DefaultHttpClientFactory>());
所以,你所需要做的就是:
- 创建
ServiceCollection
呼叫 - 构建
ServiceProvider
呼叫
AddHttpClient
GetRequiredService
为了在。net Framework 4.7.2中做到这一点,你需要使用Microsoft.Extensions.DependencyInjection
包。
using System;
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
class Program
{
private static readonly ServiceProvider serviceProvider;
static Program()
{
serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
}
public static void Main(string[] args)
{
var factory = serviceProvider.GetRequiredService<IHttpClientFactory>();
Console.WriteLine(factory == null); //False
}
}
在这里,我详细介绍了如何对SimpleInjector
进行相同的操作。