I'm using .NET Framework 4.7.2 and am trying to use IHttpClientFactory
to create HttpClient
instances.
I downloaded the Microsoft.Extensions.Http
v7 NuGet Package and now have access to System.Net.Http.HttpClientFactory
.
Am I meant to use HttpClientFactory.Create()
to create HttpClient
s?
Or do I have to use DI and IHttpClientFactory
?
What is HttpClientFactory
used for and why doesn't it implement IHttpClientFactory
?
I've checked the source code of the DefaultHttpClientFactory
and even though it is part of the Microsoft.Extensions.Http
namespace it is marked as internal
.
Gladly the AddHttpClient
extension method can do the DI registration of the above class on our behalf.
services.TryAddSingleton<DefaultHttpClientFactory>();
services.TryAddSingleton<IHttpClientFactory>(serviceProvider => serviceProvider.GetRequiredService<DefaultHttpClientFactory>());
So, all you need to do is:
ServiceCollection
AddHttpClient
ServiceProvider
GetRequiredService
In order to do that in .NET Framework 4.7.2 you need to use the Microsoft.Extensions.DependencyInjection
package.
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
}
}
Here I have detailed how to do the same with SimpleInjector