面向云技术架构 - 痴者工良

  • 首页
  • 资源导航
    • 值得收藏的网站导航
    • 本站文章导航
    • 资源下载
  • 教程文档
    • kubernetes 教程
    • 多线程和异步
    • 动态编程-反射、特性、AOP
    • 表达式树
  • 隐私政策
无虑
青山一片云雾,心安即归处,山泉水洗去来时的尘土。
听风吹过松竹,自在即归处,借一壶清茶伴日出。
  1. 首页
  2. .NET
  3. 正文

ASP.NET Core 选项

2020年6月7日 1078点热度 0人点赞 0条评论
内容纲要

首先要了解 ASP.NET Core 中的配置,请点击这里了解:https://www.cnblogs.com/whuanle/p/13061059.html

1,选项接口

ASP.NET Core 中的选项接口,一共有三个,分别是:

  • IOptions<TOptions>
  • IOptionsSnapshot<TOptions>
  • IOptionsMonitor<TOptions>

这三种方式都可以获取到配置,区别在于生命周期和文件监控等。

2,注入配置与IOptions

首先我们创建一个 ASP.NET Core API 项目,添加一个 test.json 文件,内容如下:

{
  "Title": "测试",
  "Name": "测试测试"
}

再创建一个与之对应的模型类:

    public class TestModel
    {
        public string Title { get; set; }
        public string Name { get; set; }
    }

然后在 Startup 的 ConfigureServices 方法中加上:

            services.Configure(new ConfigurationBuilder().AddJsonFile("test.json").Build());

这样就可以自动注入配置服务了。那么我们如何接收这个配置呢?
我们可以先使用 IOptions<T> 来接收。

添加一个控制器,名字随意,其内容如下:

    public class TestController : ControllerBase
    {
        private readonly TestModel _options;
        public TestController(IOptions options)
        {
            _options = options.Value;
        }
    }

这样就可以接收接入的配置了。
这就是 IOptions<TOptions> 的使用。
IOptions<TOptions> 有以下特征:
不支持:

  • 在应用启动后读取配置数据。
  • 命名选项
    可以:
  • 注册为单一实例且可以注入到任何服务生存期。

也就是说,在应用启动前就已经读取配置文件生成对象(单一实例)。当然,后续如果修改了配置文件(.json),也不会影响这个对象的。

3,IOptionsSnapshot

文档解释:通过使用 IOptionsSnapshot<TOptions>,针对请求生存期访问和缓存选项时,每个请求都会计算一次选项。

IOptionsSnapshot 的生命作用域是 scoped ,在一个请求周期内有效。

其它不变,使用时:

        private readonly TestModel _options;
        public TestController(IOptionsSnapshot options)
        {
            _options = options.Value;
        }

由于 IOptionsSnapshot 每次请求都会进行更新,因此配置文件变更后,可以及时获得更新。
IOptionsMonitor 则略有不同:

    public class TestController : ControllerBase
    {
        private readonly IOptionsMonitor _options;
        public TestController(IOptionsMonitor options)
        {
            _options = options;
        }
        [HttpGet("T")]
        public ContentResult T()
        {

            return new ContentResult()
            {
                Content = _options.CurrentValue.Title
            };
        }
    }

IOptionsSnapshot 和 IOptionsMonitor 都可以检测到配置文件的更改,但是 IOptionsSnapshot 每次请求都是一个新的对象,而 IOptionsMonitor 是单例模式。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: asp core net 选项
最后更新:2021年2月21日

痴者工良

高级程序员劝退师

点赞
< 上一篇
下一篇 >

文章评论

取消回复
You must enable javascript to see captcha here!
目录导航

COPYRIGHT © 2022 whuanle.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备18051778号

粤公网安备 44030902003257号