在Program.cs中以类型安全方式获取appsettings.json配置值
用强类型类实现配置的类型安全访问
当然可以,通过创建对应配置节的强类型类,能实现编译时的类型检查,重命名配置节或属性时会直接触发编译错误,不会等到运行时才暴露问题,同时还能获得代码提示,让配置管理更规范易维护。
具体实现步骤:
创建强类型配置类
新建一个FluentApiSettings类,属性名和类型要和appsettings.json里的配置完全对应:public class FluentApiSettings { public int TimeOutInSeconds { get; set; } // 如果还有其他配置项,直接在这里添加对应属性即可 }绑定配置到强类型类
在Program.cs里,把配置节绑定到这个类上,有两种常用方式:- 如果需要依赖注入使用(比如在服务、控制器里):
var builder = WebApplication.CreateBuilder(args); // 绑定配置并注册到DI容器 builder.Services.Configure<FluentApiSettings>(builder.Configuration.GetSection("FluentApiSettings")); - 如果只是在
Program.cs内部直接使用:var builder = WebApplication.CreateBuilder(args); // 直接绑定到实例 var fluentApiSettings = builder.Configuration.GetSection("FluentApiSettings").Get<FluentApiSettings>(); // 直接访问属性 var timeoutInSeconds = fluentApiSettings.TimeOutInSeconds;
- 如果需要依赖注入使用(比如在服务、控制器里):
在依赖注入场景中使用
比如在控制器或服务里,通过IOptions<FluentApiSettings>注入并访问配置:public class SomeService { private readonly int _timeoutInSeconds; public SomeService(IOptions<FluentApiSettings> settings) { _timeoutInSeconds = settings.Value.TimeOutInSeconds; } // 业务逻辑中使用_timeoutInSeconds }
为什么这能解决你的问题?
- 编译时检查:如果重命名
FluentApiSettings类,或者TimeOutInSeconds属性,代码会直接编译失败,不会出现运行时找不到配置的情况。 - 代码提示:编写代码时IDE会自动提示类的属性,避免手动输入字符串写错的问题。
- 可扩展性:后续新增配置项,只需要在类里添加对应属性即可,无需修改多处字符串引用。
内容的提问来源于stack exchange,提问作者Denys Wessels
相关产品推荐
相关产品推荐

