在HostBuilder中调用BuildServiceProvider以获得对服务的访问权限

问题描述 投票:0回答:1

我正在使用.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的生命周期或性能。有更好的方法吗?

asp.net-core .net-core dotnet-httpclient service-provider
1个回答
0
投票

尝试一下:

.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();
    ⋮
}
© www.soinside.com 2019 - 2024. All rights reserved.