zoukankan      html  css  js  c++  java
  • .NET CORE 配置

    配置

    提起“配置”,.NET开发人员立马会浮现出app.config和web.config两个文件,我们已经习惯将结构化的信息配置在这两个文件中。.NET CORE中的配置却有所不同,其提供了更加良好的扩展性,支持多样化的数据源。

    说明

    .NET CORE 配置主要涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。例如,在建立的mvc项目中Startup函数中,可以看到以appsettings.json作为数据源提供者,构建来的Configuration作为配置信息的承载者。

        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    

    键值对读取

    一般来说,Configuration 类只是一个提供了读写名/值对能力的 Providers 集合。通过ConfigurationProvider数据源提供者,配置生成对应的Configuration对应,可以获取名/值对。采用appsettings.json作为数据源,我们配置如下的数据。

    {
      "version":"1.0.0",
      "data":{
        "name":"demo"
      }
    }
    

    对于存储在一个有层次的结构中,尤其是使用外部文件(如 JSON、XML、INI)时,可以使用以 : 符号分隔(从层次结构的根开始)的键来取回配置值。使用生成的Configuration读取version和name的值,如下所示

    Configuration.GetSection("version").Value
    Configuration.GetSection("data:name").Value
    

    对象读取

    如果我们将一个对象的属性视为它的子节点,这样对象同样具有类似于Configuration对象的树形层次化结构。如此一来,我们可以根据配置的结构来定义这个Option类型,那么Option类型的属性成员将与某个配置节具有一一对应的关系,从而将配置信息绑定为一个具体的Option对象。
    ASP.NET Core针对配置的Option模型(OptionModel)帮助我们实现了从配置到Option对象之间的绑定,Option模型实现在Microsoft.Extensions.OptionsModel这个NuGet包。
    我们创建一个简单的 MyOptions 类如下所示:

    public class MyOptions
    {
        public string Option1 { get; set; }
        public int Option2 { get; set; }
    }
    

    配置相应的文件如下:

    {
      "version":"1.0.0",
      "data":{
        "name":"demo"
      }
      "MyOptions": {
        "Option1": "DEMO",
        "Option2": 1
      }
    }
    

    当你通过绑定选项来配置选项类型的每一个属性,实际上是绑定到每一个配置键(比如 property:subproperty:...)。比方说,MyOptions.Option1 属性绑定到键 Option1,那么就会从 appsettings.json 中读取 option1 属性。注意,配置键是大小写不敏感的。

    public void ConfigureServices(IServiceCollection services)
    {
        // Setup options with DI
        services.AddOptions();                   
    
        services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));
    
        // Add framework services.
        services.AddMvc();
    }
    

    通过调用 Configure 将一个 IConfigureOptions 服务加入服务容器,是为了之后应用程序或框架能通过 IOptions 服务来获取配置选项。若是想从其他途径(比如之前从数据库)获取配置,你可使用 ConfigureOptions 扩展方法直接指定经过定制的 IConfigureOptions 服务。

    通过 IOptions ,配置选项将被注入到应用程序中。比方说,如 controller 使用 IOptions 来访问需要在 Index 视图中渲染的配置:

    public class HomeController : Controller
    {
        private IOptions<MyOptions> _options; 
        public HomeController(IOptions<MyOptions> options) 
        {
            this._option = options;
        }                                                      
    }
    
  • 相关阅读:
    【算法笔记】B1007 素数对猜想
    【算法笔记】B1006 换个格式输出整数
    【算法笔记】B1005 继续(3n+1)猜想+sort()用法
    【算法笔记】B1004 成绩排名
    【算法笔记】B1003 我要通过!
    【算法笔记】B1002 写出这个数
    【算法笔记】B1001 害死人不偿命的(3n+1)猜想
    JZOJ 3233. 照片
    JZOJ 1243. TreeCount
    JZOJ 1241. Number
  • 原文地址:https://www.cnblogs.com/SLchuck/p/7147792.html
Copyright © 2011-2022 走看看