ASP.NET CORE 中自动集成了应用配置,支持从以下 源 处获取配置键值对

  • 命令行
  • 环境变量
  • 内存
  • 文件配置

其中文件配置是我们最常用的方式,默认文件是.json的json格式文件,摒弃了以往.config的xml的文件格式。

应用配置有以下几个约定:

  • 键不区分大小写,如果存在相同的键,则取最后一个值
  • 分层键 : 取子节点。或者__双下划线
  • 值默认为字符串
  • 不存储NULL值

那么

问:配置文件是如何加载的呢?

答:默认加载appsettings.json,如果有自定义的文件需要加载,则需要在WEBHOST初始化时添加文件路径。

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
//config.SetBasePath(Directory.GetCurrentDirectory());//如果iis调试,请注释
config.AddJsonFile("appsettings_ext.json", optional: false, reloadOnChange: false);
})
.UseStartup<Startup>();

问:如果获取配置文件内容

答:IConfiguration。支持在任何地方注入。并有以下几个主要获取Value的方法

配置文件示例:

  "one": "1",
"two": { "_two": "2" },
"fourToSeven": [ "4", "5", "6", "7" ],
"People": {
"Name": "gt",
"Male": "1"
},
"Books": [
{ "Name": "语文" },
{ "Name": "数学" }
]

取值方式

//直接获取键值对的Value
_configuration.GetValue<string>("one"); //获取子节点的Value,使用约定:
_configuration.GetValue<string>("two:_two");
//或者获取section的子节点,再去获取Value
_configuration.GetSection("two").GetChildren().First(x => string.Equals("_two", x.Key, StringComparison.CurrentCultureIgnoreCase)); //获取数组的方式,本质是一个
_configuration.GetSection("fourToSeven").Get<string[]>();

问:实际应用中我们通常使用类对象来表示配置,.NET CORE里面是如何绑定到类的

答:.NET CORE提供了Bind方法来将配置绑定到类,另外还提供了Options方式来实现

            //获取Section绑定到对象类,注意对象类的属性值要和配置中一致
var user = new People();
_configuration.GetSection("People").Bind(user);
_people = user; //也可以采用万能的Get方式,更为简洁
_configuration.GetSection("people").Get<People>(); public class People
{
public string Name { get; set; }
public int Male { get; set; }
}

  Options方式应该是我们日常应用中常用的方式,毕竟IConfiguration需要在使用的地方注入,且需要知道KEY,这就形成了硬编码模式。

我们先定义一个Options,

    public class BookOptions
{
public string Name { get; set; }
}

  那么我们可以在Startup类的ConfigureServices中进行 配置。

    services.Configure<List<BookOptions>>(Configuration.GetSection("books"));
//这种方式可以给配置项目一个名称,获取的时候根据名称获取
services.Configure<List<BookOptions>>("myname",Configuration.GetSection("books"));

  使用Options也是通过注入的方式使用(万恶的.NET CORE,无处不在注入)。.NET CORE使用 IOptionsMonitor<T>注入的方式,同时其也控制着Options生命周期 。

        private readonly List<BookOptions> _books;
private readonly List<BookOptions> _booksNamed; public ConfigController(IConfiguration configuration,
IOptionsMonitor<List<BookOptions>> bookAccessor,
IOptionsSnapshot<List<BookOptions>> bookNamedAccessor)
{
_configuration = configuration;
_books = bookAccessor.CurrentValue;
_booksNamed = bookNamedAccessor.Value;
}

  IOptionsSnapshot<TOptions> 支持包含最小处理开销的重新加载选项。针对请求生存期访问和缓存选项时,每个请求只能计算一次选项。

.NET CORE配置使用大抵如此,当然实际应用中可能会更复杂点,其也提供了很多扩展方法。

.Net Core之Configuration的更多相关文章

  1. .NET Core 配置Configuration杂谈

    前言 .NET Core 在配置文件的操作上相对于.NET Framework做了不少改变,今天来聊一聊.关于Configuration的Package都是以Microsoft.Extensions. ...

  2. 理解ASP.NET Core - 配置(Configuration)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 配置提供程序 在.NET中,配置是通过多种配置提供程序来提供的,包括以下几种: 文件配置提供程 ...

  3. .Net Core配置Configuration源码研究

    最近又研究了一下.NetCore配置选项的源码实现,又学习到了不少东西.这篇文章先写一下IConfiguration的学习成果,Options的后面补上 核心类 ConfigurationBuilde ...

  4. Configuration in ASP.NET Core(未完,待续)

    Configuration in ASP.NET Core App configuration in ASP.NET Core is based on key-value pairs establis ...

  5. .NET Core 3.0之创建基于Consul的Configuration扩展组件

    写在前面 经过前面三篇关于.NET Core Configuration的文章之后,本篇文章主要讨论如何扩展一个Configuration组件出来.如果前面三篇文章没有看到,可以点击如下地址访问 .N ...

  6. asp.net core 系列之Configuration

    在ASP.NET Core中的App configuration 是通过configuration providers基于key-value对建立的.Configuration providers读取 ...

  7. 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)

    翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 ASP ...

  8. ASP.NET Core 中文文档 第三章 原理(14)服务器

    原文:Servers 作者:Steve Smith 翻译:谢炀(Kiler) 校对:许登洋(Seay).姚阿勇(Dr.Yao) ASP.NET Core 已完全从承载应用程序的 Web 服务器环境中分 ...

  9. ASP.NET Core模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

随机推荐

  1. Ultra-QuickSort--POJ2299(归并排序求逆序数对)

    http://poj.org/problem?id=2299 归并排序:比如现在有一个序列[l,r),我们可以把这个序列分成两个序列[l,mid),[mid,r),利用递归按照上 述方法逐步缩小序列, ...

  2. 基于commons-net实现ftp创建文件夹、上传、下载功能

    原文:http://www.open-open.com/code/view/1420774470187 package com.demo.ftp; import java.io.FileInputSt ...

  3. 【Nginx】Nginx的配置

    配置文件为.conf文件 一.块配置项 块配置项由一个块配置项名和一对大括号组成.具体如下: events{ ... } http{ upstream backend{ server 127.0.0. ...

  4. 图解TCP/IP第五版 -- 文件夹

    非常多年前买过<TCP/IP具体解释>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是.买了太多的书,基本都没看,搬家搬来搬去的麻 ...

  5. iOS设计模式 - (1)概述

    近期可自由安排的时间比較多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 由于我自己是搞iOS的, 所以之后设 ...

  6. LeetCode 168 Excel Sheet Column Title(Excel的列向表标题)

    翻译 给定一个正整数,返回它作为出如今Excel表中的正确列向标题. 比如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 - ...

  7. c# 自定义Base16编码解码

               一.自定义Base16编码原理                  Base16编码跟Base64编码原理上有点不同,当然前面转换是一样的,都是是将输入的字符串根据默认编码转换成一 ...

  8. Hibernate基础-HelloWord

    1. ORM :ORM (Object /Relation Mapping ): 对象/关系映射(理解)      1) ORM 主要解决对象 -关系的映射      2) .ORM的思想:将关系数据 ...

  9. openstack kolla多节点容器化环境安装

    好久没写随笔了,6月份趁着在公司没有太忙的事儿,把公司的服务器进行了虚拟化,采用的openstack当前的容器化方案kolla. 整体安装完的感受时,小白感觉自己是个大牛!哈哈,开玩笑,由于以前是开发 ...

  10. 【iOS系列】-UIImageView帧动画相关属性介绍

    UIImageView帧动画相关属性介绍 1:相关属性: //An array of UIImage objects to use for an animation.存放UIImage对象,会按顺序显 ...