c# - 如何从 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。
解决方案
正如在 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;
}
推荐阅读
- kendo-ui - 用于角字符的 Kendo UI 以文本形式导出为 PDF
- python - 在我尝试在我的 Big Sur / Apple 硅 Macbook 上升级系统 PIP 后,它似乎坏了
- python - 使用python打印一个月的前10个工作日
- javascript - 读取目录同步中的读取文件同步不会在编译下一行之前等待
- tableau-api - Tableau 表未呈现?
- apache-flink - 如何合并多个 Keyed Streams,然后在 Merged Stream 上执行自定义聚合功能
- java - 将地图属性合并到 Java POJO
- sql - SQL查询计算交易当年的汇率
- laravel - 作业队列不能在服务器上运行 Laravel
- c# - 如何在浏览表单时始终显示 db 的价值