我正在使用.Net Core v2.2。我需要将IHttpClientFactory传递到我的自定义LoggerProvider中。为了从ConfigureLogging中访问此服务,我可以这样做:
.ConfigureLogging((hostingContext, logBuilder) =>
{
var factory = logBuilder.Services.BuildServiceProvider().GetService(typeof(IHttpClientFactory)) as IHttpClientFactory;
logBuilder.AddProvider(new SlackLoggerProvider(factory));
})
我认为BuildServiceProvider()
最终会创建一组重复的服务。这个可以吗?它正在工作,但我想知道这是否会影响IHttpClientFactory的生命周期或性能。有更好的方法吗?
尝试一下:
.ConfigureLogging(builder =>
{
builder.Services.AddSingleton<ILoggerProvider, SlackLoggerProvider>();
})
然后您可以照常使用依赖项注入:
public class SlackLoggerProvider
{
private readonly IHttpClientFactory _clientFactory;
public SlackLoggerProvider(IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
}
}
您只需要将IHttpClientFactory
添加到服务集合中:
public void ConfigureServices(IServiceCollection services)
{
⋮
services.AddHttpClient();
⋮
}