我有一个.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
};
});
我想将HttpClientHandler添加到没有DI的示例代码#1中。 如何配置没有DI的主消息处理程序?
答案 0 :(得分:0)
我认为这是一个奇怪的设置,但除此之外,您可能可以执行以下操作:
private readonly HttpClient client;
public A() {
var serviceProvider = new ServiceCollection()
.AddHttpClient("YourHttpClientName")
.Configure<HttpClientFactoryOptions>("YourHttpClientName", options =>
options.HttpMessageHandlerBuilderActions.Add(builder =>
builder.PrimaryHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (m, crt, chn, e) => true
}))
.BuildServiceProvider();
var _httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
client = _httpClientFactory.CreateClient(); //HttpClient instance created
//TODO: Add custom message handler without DI.
}
我刚刚检查了ConfigurePrimaryHttpMessageHandler
的实现,并将其链接到您的设置中。
我的建议是更改代码并正确使用DI,因为.NET Core非常依赖于此。