能否通过.NET HostApplicationBuilder获取已绑定的配置值?
如何通过MySettings类实例访问配置值
当然可以通过MySettings类的实例来访问配置值,根据场景不同有两种常用方式:
1. 从构建完成的Host服务容器中获取(推荐)
AddOptions<MySettings>().BindConfiguration("MySettings")已经将配置绑定逻辑注册到了依赖注入容器中,构建Host后可从服务容器解析IOptions<MySettings>获取实例:
public static async Task Main(string[] args) { var builder = Host.CreateApplicationBuilder(args); builder.Services .AddOptions<MySettings>() .BindConfiguration("MySettings"); var host = builder.Build(); // 从服务容器获取配置实例 var mySettings = host.Services.GetRequiredService<IOptions<MySettings>>().Value; Console.WriteLine(mySettings.MyValue); // 输出 "Foo" await host.RunAsync(); }
2. 在Builder阶段手动绑定实例(启动阶段快速获取)
如果无需依赖注入,只是想在构建Host前直接拿到配置实例,可手动调用配置的Bind方法:
public static async Task Main(string[] args) { var builder = Host.CreateApplicationBuilder(args); // 手动创建实例并绑定配置 var mySettings = new MySettings(); builder.Configuration.GetSection("MySettings").Bind(mySettings); Console.WriteLine(mySettings.MyValue); // 输出 "Foo" // 依然可注册到服务容器供其他组件使用 builder.Services .AddOptions<MySettings>() .BindConfiguration("MySettings"); await builder.Build().RunAsync(); }
补充说明
IOptions<MySettings>是.NET Options模式的标准实现,支持配置延迟加载、变更通知、数据验证等特性,在应用的其他服务中,推荐通过构造函数注入IOptions<MySettings>来使用配置,而非手动绑定。
内容的提问来源于stack exchange,提问作者Bob Tway
相关产品推荐
相关产品推荐

