分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

ASP.NET Core 2.2 基础知识(七) 选项模式

发布时间:2023-09-06 02:29责任编辑:蔡小小关键词:.NET

承接上一篇 配置,

选项模式是专门用类来表示相关配置的服务.

基本选项配置

新建一个选项类,该类必须是包含无参数的构造函数的非抽象类.

 ???public class MyOptions ???{ ???????public MyOptions() ???????{ ???????????Id = 1; ???????????Name = "refuge"; ???????} ???????public int Id { get; set; } ???????public string Name { get; set; } ???}

添加到服务容器,并绑定到配置:

 ???public class Startup ???{ ???????...... ???????public IConfiguration Configuration { get; } ???????public void ConfigureServices(IServiceCollection services) ???????{ ???????????services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); ???????????services.Configure<MyOptions>(Configuration); ???????} ???????...... ???}

测试控制器:

 ???[Route("api/[controller]/[action]")] ???[ApiController] ???public class TestController : ControllerBase ???{ ???????private readonly IOptions<MyOptions> _options; ???????public TestController(IOptions<MyOptions> options) ???????{ ???????????_options = options; ???????????_config = config; ???????} ???????public MyOptions Get() ???????{ ???????????return _options.Value; ???????} ???}

结果:

通过委托配置选项

 ???????public void ConfigureServices(IServiceCollection services) ???????{ ???????????services.Configure<MyOptions>(options => ???????????{ ???????????????//这些值会替代 MyOptions 构造函数中设置的值. ???????????????//原因很简单,肯定是对象创建了,才会执行这个委托. ???????????????options.Id = 2; ???????????????options.Name = "refuge2"; ???????????}); ???????}

通过文件配置简单选项

新建一个json文件:

{ ?"Id": 3, ?"Name": "refuge3"}
 ???????public void ConfigureServices(IServiceCollection services) ???????{ ???????????services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); ???????????ConfigurationBuilder builder = new ConfigurationBuilder(); ???????????IConfigurationRoot config = builder.AddJsonFile(path: @"E:\Git\Source\Repos\MyOption\Demo1\jsonconfig.json", optional: true, reloadOnChange: true).Build(); ???????????services.Configure<MyOptions>(config); ???????}

还可以读取文件中的某个节点配置简单选项

修改 json 文件,增加 subsection 节点.

{ ?"Id": 3, ?"Name": "refuge3", ?"SubSection": { ???"Id": 4, ???"Name": "refuge4" ?} }
 ???????public void ConfigureServices(IServiceCollection services) ???????{ ???????????ConfigurationBuilder builder = new ConfigurationBuilder(); ???????????IConfigurationRoot config = builder.AddJsonFile(@"E:\Git\Source\Repos\MyOption\Demo1\jsonconfig.json", true, true).Build(); ???????????services.Configure<MyOptions>(config.GetSection("subsection")); ???????}

上面这些例子中的获取到的 MyOptions 对象都是单例的.比如通过文件配置简单选项,即使 AddJsonFile 方法最后一个参数是 true ,配置数据也不会更新.要实现更新需要使用下面这个接口.

通过 IOptionsSnapshot 重新加载配置数据

修改 TestController :

[Route("api/[controller]/[action]")] ???[ApiController] ???public class TestController : ControllerBase ???{ ???????private readonly IOptionsSnapshot<MyOptions> _options; ???????public TestController(IOptionsSnapshot<MyOptions> options) ???????{ ???????????_options = options; ??????????????????}
 ???????public MyOptions Get() ???????{ ???????????return _options.Value; ???????}
???}

第一次请求:

修改 json 文件后,刷新页面

通过别名配置选项

 ???????public void ConfigureServices(IServiceCollection services) ???????{ ???????????services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); ???????????services.Configure<MyOptions>("option1", Configuration); ???????????services.Configure<MyOptions>("option2", options => ???????????{ ???????????????options.Id = 6; ???????????????options.Name = "refuge6"; ???????????}); ???????}

修改 TestController 

 ???[Route("api/[controller]/[action]")] ???[ApiController] ???public class TestController : ControllerBase ???{ ???????private readonly IOptionsSnapshot<MyOptions> _options; ???????public TestController(IOptionsSnapshot<MyOptions> options) ???????{ ???????????_options = options; ???????} ???????public IEnumerable<MyOptions> Get() ???????{ ???????????for (int i = 1; i < 3; i++) ???????????{ ???????????????yield return _options.Get("option" + i); ???????????} ???????} ???}

当启用多个配置服务时,指定的最后一个配置源优于其他源.

未完待续...

ASP.NET Core 2.2 基础知识(七) 选项模式

原文地址:https://www.cnblogs.com/refuge/p/10226271.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved