zoukankan      html  css  js  c++  java
  • ASP.NET Core 选项


    首先要了解 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<TestModel>(new ConfigurationBuilder().AddJsonFile("test.json").Build());
    

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

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

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

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

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

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

    3,IOptionsSnapshot

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

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

    其它不变,使用时:

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

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

        public class TestController : ControllerBase
        {
            private readonly IOptionsMonitor<TestModel> _options;
            public TestController(IOptionsMonitor<TestModel> options)
            {
                _options = options;
            }
            [HttpGet("T")]
            public ContentResult T()
            {
    
                return new ContentResult()
                {
                    Content = _options.CurrentValue.Title
                };
            }
        }
    

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

  • 相关阅读:
    线程池学习笔记
    线性表的顺序存储和链式存储的实现(C)
    二叉树遍历算法——包含递归前、中、后序和层次,非递归前、中、后序和层次遍历共八种
    【Linux学习笔记】栈与函数调用惯例
    Linux网络编程简单示例
    Linux常用C函数-接口处理篇(网络通信函数)
    android的快速开发框架集合
    Android访问网络数据的几种方式Demo
    Linux C函数库大全
    Mysql 之配置文件my.cnf
  • 原文地址:https://www.cnblogs.com/whuanle/p/13062274.html
Copyright © 2011-2022 走看看