.NET 8中WebApplication.CreateBuilder替代ConfigureAppConfiguration的等效方法
在.NET 8的WebApplication.CreateBuilder中替代ConfigureAppConfiguration的方法
问题描述
我之前在.NET 6中通过WebHost.CreateDefaultBuilder调用ConfigureAppConfiguration方法添加ConfigurationSource,现在升级到.NET 8后改用WebApplication.CreateBuilder,但找不到对应的ConfigureAppConfiguration方法。
我的需求是为AWS Secrets Manager添加ConfigurationSource,实现类似AWS官方博客中描述的功能。之前尝试按.NET 6的方式添加ConfigurationSource,但因缺少等效方法,导致从AWS Secrets Manager获取的内容为空,希望实现和.NET 6中ConfigureAppConfiguration完全一致的功能。
更新内容:自定义扩展方法
我已实现如下扩展方法:
public static IConfigurationBuilder UseAmazonSecretManagerConfiguraton(this IConfigurationBuilder config, Action<AWSProviderOptions> action) { if (action == null) { throw new ArgumentNullException(nameof(action)); } // 实例化配置选项 var opts = new AWSProviderOptions(); // 执行配置委托 action(opts); // 创建对应配置源 var configurationSource = new AmazonKMSConfigurationSource { SecretName = opts.SecretName }; config.Add(configurationSource); return config; }
解决方案
在.NET 8的WebApplication.CreateBuilder中,无需使用ConfigureAppConfiguration,直接通过builder.Configuration即可获取IConfigurationBuilder实例,进而调用你的自定义扩展方法,具体代码示例如下:
.NET 6原有写法
WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { config.UseAmazonSecretManagerConfiguraton(opts => { opts.SecretName = "你的密钥名称"; }); }) .UseStartup<Startup>();
.NET 8等效写法
var builder = WebApplication.CreateBuilder(args); // 直接通过builder.Configuration调用扩展方法添加配置源 builder.Configuration.UseAmazonSecretManagerConfiguraton(opts => { opts.SecretName = "你的密钥名称"; }); // 后续服务配置 builder.Services.AddControllers(); var app = builder.Build(); // 中间件配置逻辑 // ... app.Run();
注意事项
- 确保你的
AmazonKMSConfigurationSource类正确实现了IConfigurationSource接口,能够正常从AWS Secrets Manager拉取配置内容。 - 配置源的添加顺序会影响配置优先级,若需要让Secrets Manager的配置覆盖其他源的配置,需确保它在其他配置源之后添加(默认
WebApplication.CreateBuilder已加载了appsettings等配置,后续添加的源优先级更高)。
内容的提问来源于stack exchange,提问作者Matthew Kok
相关产品推荐
相关产品推荐

