我有一个.NET 4.6.2控制台应用程序(使用简单注入器)。我需要拨打HTTP服务。直接使用HttpClient遇到问题后,我正尝试使用HttpClientFactory(https://github.com/aspnet/HttpClientFactory)。
该项目/库是.NET Standard 2.0,所以应该??可以在.NET 4.6.2中使用,但它使用IServiceCollection之类的东西,仅在Core中。
所以我的问题是我可以在非Core应用程序中使用HttpClientFactory吗?
答案 0 :(得分:16)
所有Microsoft.Extensions。*软件包都针对.NET Standard 2.0。这意味着,如果将适当的包添加到应用程序中,则可以使用依赖注入,配置,记录和 HttpClientFactory。
您需要添加Microsoft.Extensions.Http才能使用HttpClientFactory,如果要与Microsoft.Extensions.Http.Polly一起使用,请添加Polly
要配置HttpClientFactory,您必须将Microsoft.Extensions.DependencyInjection添加到“主”项目中。 Microsoft.Extensions.Http包仅取决于包含接口的Microsoft.Extensions.DependencyInjection.Abstractions,而不取决于DI提供程序本身。
答案 1 :(得分:3)
正如@Panagiotis Kanavos所说,您需要添加 Microsoft.Extensions.Http 和 Microsoft.Extensions.DependencyInjection 。这是我的ConsoleApp代码,您可以参考它。
class Program
{
static void Main(string[] args)
{
Test();
Console.Read();
}
static async void Test()
{
var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
var client = httpClientFactory.CreateClient();
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "http://www.baidu.com"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}