【发布时间】:2020-08-28 08:41:09
【问题描述】:
我的 Program.cs 文件中有一个非常标准的 ASP.NET Core Web 应用程序初始化代码片段:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddSerilog(dispose: true);
})
.UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
.UseStartup<Startup>();
我想插入我的自定义配置拦截器,它读取并替换配置的当前最终组合值,但我不明白该怎么做。
我们从 Microsoft 文档中了解到,CreateDefaultBuilder 使用环境特定的 json 覆盖 appsettings.json,最后使用环境变量和命令行参数覆盖它。我想在最后一步之后立即注入我的自定义代码,这样我就可以在值通过public IConfiguration Configuration { get; } 进一步向下传递给 Startup 之前拦截和修改值。
我在 ASP.NET Core 源代码中发现了一个有趣的函数:
ConfigureAppConfiguration((hostingContext, config) =>
它结合了所有来源。我不想完全覆盖它,我只想在 ConfigureAppConfiguration 完成其工作但在我的 Startup 接收配置值之前附加我自己的配置转换。
我该怎么做?
更多信息以提供一些上下文:
目标是为配置值注入自定义解密例程,这些配置值可能在这三个位置(appsettings.json、环境 json、环境变量)中的任何一个位置被加密。我只找到了通过自定义配置提供程序为 appsettings.json 实现加密的答案,但没有找到在所有组合源之后注入我的解密例程的答案。
我不是要求加密/解密例程本身(我已经拥有它们),而是要求一种解决方案,用于注入接收配置值的函数调用以用我的解密值覆盖。
【问题讨论】:
-
您可以定义自定义扩展方法来转换构建后的配置。或者定义自定义配置源,在所有之前的源之后应用
-
@PavelAnikhouski 你能提供一个简单的例子吗?在哪里注入它以及如何在将所有配置值传递给 Startup 之前访问它们?
标签: c# asp.net-core configuration