【发布时间】:2020-09-14 06:25:04
【问题描述】:
我有一个 .NET Core 类库。正在使用 IHttpClientFactory 创建 HttpClient 实例而无需依赖注入。我在我的类库中包含了 Microsoft DI nuget 包。
示例代码 #1:
Class A {
private readonly HttpClient client;
public A(){
var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
var _httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
client = _httpClientFactory.CreateClient(); //HttpClient instance created
//TODO: Add custom message handler without DI.
}
}
使用 DI,我们可以配置自定义消息处理程序: 带 DI 的示例代码 #2:
services.AddHttpClient()
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
};
});
我想在没有 DI 的情况下将 HttpClientHandler 添加到我的示例代码 #1。 如何在没有 DI 的情况下配置主消息处理程序?
【问题讨论】:
-
你的意思是不使用AddHttpClient?
-
你总是可以使用
services.BuildServiceProvider().GetService<HttpClient>()从services中获取HttpClient -
能够获取 HttpClient。我想添加自定义消息处理程序。
-
如果您使用上述函数,您的消息处理程序将在其中。您还可以使用
AddHttpMessageHandler添加其他消息处理程序 -
很好的例子。在您的示例中,“服务”变量的类型为 IServiceCollection,它来自 DI 容器。我想在没有 DI 容器的类库中添加处理程序
标签: c# asp.net-core .net-core dependency-injection httpclient