.NET9中使用Options
选项模式在 ASP.NET Core 中使用类来提供对相关配置设置的强类型访问。通过将配置设置隔离到单独的类,应用程序遵循封装和关注点分离的原则。封装确保依赖于配置的类仅依赖于其使用的设置;关注点分离则确保应用的不同部分的设置互不依赖或耦合。此外,选项模式还提供了验证配置数据的机制。
- 三种IOptions:
下面是代码文件:
Program.cs
using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(args); builder.Services.AddOptions<Setting>().BindConfiguration("Setting"); var app = builder.Build(); app.Services.GetService<IOptionsMonitor<Setting>>()?.OnChange((setting, name) => { app.Logger.LogInformation(setting.Value); }); app.MapGet("/opt1", (IOptions<Setting> option) => { app.Logger.LogInformation("opt1"); return option.Value; }); app.MapGet("/opt2", (IOptionsSnapshot<Setting> option) => { app.Logger.LogInformation("opt2"); return option.Value; }); app.MapGet("/opt3", (IOptionsMonitor<Setting> option) => { app.Logger.LogInformation("opt3"); return option.CurrentValue; }); app.Run(); class Setting { public string Name { get; set; } public string Value { get; set; } }
appsettings.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "Setting": { "Name": "key", "Value": "1234567890" } }
OptionDemo.http
@OptionDemo_HostAddress = http://localhost:5064 GET {{OptionDemo_HostAddress}}/opt1 Accept: application/json ### GET {{OptionDemo_HostAddress}}/opt2 Accept: application/json ### GET {{OptionDemo_HostAddress}}/opt3 Accept: application/json ###
打开OptionDemo.http,点击Opt1,Opt2,Opt3的“发送请求”,结果如下:
把 appsettings.json中的Setting的Value改成“1234567890ABCD”,结果如下:
请求Opt1结果:
请求Opt2结果:
请求Opt3结果:
- 验证:
可以通过Validate()方法对Options进行验证,目前有两种验证点,一个是服务启动时,即有ValidateOnStart方法;另外一种是在使用这个Options时,即不写ValidateOnStart方法。
builder.Services.AddOptions<Setting>() .BindConfiguration("Setting") .ValidateOnStart<Setting>() .Validate(setting => { return !string.IsNullOrWhiteSpace(setting.Name) && !string.IsNullOrWhiteSpace(setting.Value); }, "Setting配置有误");
触发错误如下:
利用Validate是自定义验证,当然也可以利用DataAnnotations进行验证,代码如下:
builder.Services.AddOptions<Setting>() .BindConfiguration("Setting") .ValidateDataAnnotations();
触发错误如下:
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号
****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!