.NET 6使用HostBuilder构建主机后如何获取IConfiguration配置值
.NET 6 控制台应用主程序获取IConfiguration实例方法
调用HostBuilder.Build()生成IHost实例后,通用宿主已经自动将IConfiguration以单例生命周期注册到DI容器中,不需要手动额外注册,直接通过宿主的Services属性即可获取实例。
具体实现代码
在你现有代码的Build()调用后追加以下逻辑即可:
var host = SvcBuilder.Build(); // 引入Microsoft.Extensions.DependencyInjection命名空间才能用GetRequiredService扩展方法 var configuration = host.Services.GetRequiredService<IConfiguration>(); // 读取配置示例 // 1. 读取层级键值 string configValue = configuration["CustomConfig:SubKey"]; // 2. 读取预设的连接字符串节点 string dbConnStr = configuration.GetConnectionString("MyDatabase"); // 3. 绑定强类型配置对象 // MyConfigOptions opts = configuration.GetSection("MyConfig").Get<MyConfigOptions>();
补充:注册服务阶段提前获取配置
如果你不需要等宿主构建完成,在ConfigureServices流程中就需要读取配置,可以直接通过方法传入的HostBuilderContext参数获取,不需要走容器解析:
.ConfigureServices((hostContext, services) => { // 直接从上下文取配置实例 var config = hostContext.Configuration; services.AddLogging(configure => configure.AddConsole()) .AddTransient<IStoreFactory, StoreCtxFactory>(); });
注意:从根服务容器
host.Services解析服务时,仅建议解析单例生命周期的服务。IConfiguration默认就是单例注册,直接解析不会有生命周期异常问题;不要从根容器直接解析Scoped生命周期服务,否则会出现对象无法正常释放、状态异常的问题。
内容的提问来源于stack exchange,提问作者bitshift
相关产品推荐
相关产品推荐

