首页 > 解决方案 > 如何从 Extension 方法中获取 HostBuilderContext?

问题描述

我正在研究一个简单的扩展方法,在 program.cs 中调用如下。我刚刚把代码中最重要的部分放在这里。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        })
        .ConfigureAppConfiguration((ctx, builder) =>
        {
        })
    .ConfigureCustomLogger((ctx,settings)=> {
        settings = ctx.Configuration.GetSection("LogSettings").Get<LogSettings>();
    });

扩展方法

public static IHostBuilder ConfigureCustomLogger(this IHostBuilder builder, Action<HostBuilderContext,LogSettings> configuration)
{
    var logSettings = new LogSettings();
    configuration(/*instance of HostBuilderContext*/,logSettings);
}

不确定如何获取 HostBuilderContext 的实例?基本上该方法是假设填充 logSettings。

标签: c#asp.net-core

解决方案


正如在 Microsoft ( https://source.dot.net/#Microsoft.Extensions.Hosting/HostingHostBuilderExtensions.cs,226edc6eec27581b ) 的 ConfigureLogging 实现中,您可以使用 ConfigureServices:

public static IHostBuilder ConfigureCustomLogger(this IHostBuilder builder, Action<HostBuilderContext, LogSettings> configuration)
{
    builder.ConfigureServices((ctx, collection) =>
    {
        var logSettings = new LogSettings();
        configuration(ctx, logSettings);
    });
    return builder;
}

推荐阅读