为什么System.Net.Http.HttpClientFactory没有实现System.Net.Http.IHttpClientFactory?



我正在使用。net Framework 4.7.2,我试图使用IHttpClientFactory来创建HttpClient实例。

我下载了Microsoft.Extensions.Httpv7 NuGet包,现在可以访问System.Net.Http.HttpClientFactory了。

我是要使用HttpClientFactory.Create()来创建HttpClients吗?

或者我必须使用DI和IHttpClientFactory吗?

HttpClientFactory是用来做什么的,为什么不实现IHttpClientFactory?

我已经检查了DefaultHttpClientFactory的源代码,尽管它是Microsoft.Extensions.Http名称空间的一部分,但它被标记为internal

很高兴AddHttpClient扩展方法可以代表我们为上面的类做DI注册。

services.TryAddSingleton<DefaultHttpClientFactory>();
services.TryAddSingleton<IHttpClientFactory>(serviceProvider => serviceProvider.GetRequiredService<DefaultHttpClientFactory>());

所以,你所需要做的就是:

  1. 创建ServiceCollection
  2. 呼叫AddHttpClient
  3. 构建ServiceProvider
  4. 呼叫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 进行相同的操作。

最新更新