亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

[Asp.net 5] Configuration-新一代的配置文件(接口定義與基礎實現)

2019-11-17 02:07:27
字體:
來源:轉載
供稿:網友

[asp.net 5] Configuration-新一代的配置文件(接口定義與基礎實現)

關于配置文件的目錄:[Asp.net 5] Configuration-新一代的配置文件

本系列文章講的是asp.net 5(Asp.net VNext)中的配置文件部分,工程下載地址為:https://github.com/aspnet/Configuration

本節講的是Configuration解決方案中的Microsoft.Framework.Configuration和Microsoft.Framework.Configuration.Abstractions倆個工程。

Abstractions

首先我們看下Configuration.Abstractions這個工程的詳情:

該工程中只定義了三個接口:IConfiguration、IConfigurationBuilder、IConfigurationSource,是完全為了抽象而設計的工程。

我們在依賴注入(DependencyInjection)篇中也接觸過名字為“Abstractions”的工程(鏈接地址:http://www.49028c.com/watermoon2/p/4511269.html),也是只包含必須的接口定義,我們可以推測,微軟的命名規則是對于XXXX類工程:

  • Microsoft.Framework.XXXX.Abstractions:定義微軟XXXX的必須的抽象
  • Microsoft.Framework.XXXX:定義微軟的XXXX的基礎實現,內部類多實現Microsoft.Framework.XXXX.Abstractions中接口

配置文件中,肯定少不了配置文件類的基礎接口定義:IConfiguration;我們知道新的配置文件實現,支持配置文件有多個來源,可以來自xml、可以來自json、也可以既有部分來自xml,又有部分來自json,所以接口中定義了“IConfigurationSource”接口,用于標示配置文件的來源;而IConfigurationBuilder是IConfiguration的構造器。

這個工程代碼比較少,下面我就將接口定義羅列如下:

public interface IConfigurationSource    {        bool TryGet(string key, out string value);        void Set(string key, string value);        void Load();        IEnumerable<string> PRoduceConfigurationSections(            IEnumerable<string> earlierKeys,            string prefix,            string delimiter);    } public interface IConfigurationBuilder    {        string BasePath { get; }        IEnumerable<IConfigurationSource> Sources { get; }        IConfigurationBuilder Add(IConfigurationSource configurationSource);        IConfiguration Build();    }public interface IConfiguration    {        string this[string key] { get; set; }        string Get(string key);        bool TryGet(string key, out string value);        IConfiguration GetConfigurationSection(string key);        IEnumerable<KeyValuePair<string, IConfiguration>> GetConfigurationSections();        IEnumerable<KeyValuePair<string, IConfiguration>> GetConfigurationSections(string key);        void Set(string key, string value);        void Reload();    }
接口定義

Configuration

我們還是將工程的詳情列出:

工程中一共八個cs文件:

1,IConfigurationSource實現類:ConfigurationSource、MemoryConfigurationSource

2,IConfigurationBuilder實現類:ConfigurationBuilder;IConfigurationBuilder擴展方法:ConfigurationHelper

3,IConfiguration實現類:ConfigurationSection、ConfigurationFocus

4,幫助輔助類:ConfigurationKeyComparer、Constants。

一個約定:":"

我們知道配置文件不都是線性的,可能有層次結構(比如傳統的配置文件、json的、xml的)。我們讀取配置文件的key值就需要有一定的邏輯。現在的邏輯是:

  • 根節點對象:“當前key”
  • 非根節點對象:“前綴”+“分隔符”+“當前key"(前綴是當前節點父節點的key值)

所以對于如下的json格式{"root1":"r1","root2":{"sub1":"s2"}},想要獲取值是“s2”,所使用的key值是“root2:sub1”;“root2”是父節點的key,“:”是分隔符,“sub1”是當前key。

在這里的分隔符,其實就是定義在Constants類中,public static readonly string KeyDelimiter = ":"; 不過源文件中其他部分并未都直接使用該處定義,在IConfigurationSource的派生類也都是自己定義的“:”;所以想修改分隔符,在現有代碼中不是能夠只修改Constants中這個全局變量就可以的。所以在源碼還有問題的時候,我們還是把分隔符=“:”,作為一個約定(不要試圖把分隔符該城其他字符串)。

特殊的排序方式

由于當前key值得字符串可能是由存數字組成,我們希望key值為“1”,“2”,“10”的順序是“1”,“2”,“10” 而不是“1”,“10”,“2”(字符串默認排序的順序),所以系統在排序的時候使用了IComparer<string>接口。而IComparer<string>接口的實現類就是ConfigurationKeyComparer

public class ConfigurationKeyComparer : IComparer<string>    {        private const char Separator = ':';        public static ConfigurationKeyComparer Instance { get; } = new ConfigurationKeyComparer();        public int Compare(string x, string y)        {            var xParts = x?.Split(Separator) ?? new string[0];            var yParts = y?.Split(Separator) ?? new string[0];            // Compare each part until we get two parts that are not equal            for (int i = 0; i < Math.Min(xParts.Length, yParts.Length); i++)            {                x = xParts[i];                y = yParts[i];                var value1 = 0;                var value2 = 0;                var xIsInt = x != null && int.TryParse(x, out value1);                var yIsInt = y != null && int.TryParse(y, out value2);                int result = 0;                if (!xIsInt && !yIsInt)                {                    // Both are strings                    result = string.Compare(x, y, StringComparison.OrdinalIgnoreCase);                }                else if (xIsInt && yIsInt)                {                    // Both are int                     result = value1 - value2;                }                else                {                    // Only one of them is int                    result = xIsInt ? -1 : 1;                }                if (result != 0)                {                    // One of them is different                    return result;                }            }            // If we get here, the common parts are equal.            // If they are of the same length, then they are totally identical            return xParts.Length - yParts.Length;        }    }
ConfigurationKeyComparer

前面的鋪墊已經講完,下面我們進入正文:ConfigurationBuilder以及ConfigurationHelper

ConfigurationBuilder的功能主要有四點:

  • 能夠設置加載的IConfigurationSource源路徑目錄
  • 能夠管理的IConfigurationSource列表
  • 能夠加載IConfigurationSource
  • 能夠創建IConfiguration

代碼中需要注意的也就只有一點:添加新的IConfigurationSource時,首先加載,之后再將IConfigurationSource對象添加到內部IConfigurationSource列表中。

ConfigurationHelper是ConfigurationBuilder的擴展,作用只有一個:

  • 將如果傳入路徑是相對路徑,將IConfigurationSource源路徑目錄和傳入路徑進行合并。

ConfigurationBuilder以及ConfigurationHelper源碼如下:

public class ConfigurationBuilder : IConfigurationBuilder    {        private readonly IList<IConfigurationSource> _sources = new List<IConfigurationSource>();        public ConfigurationBuilder(params IConfigurationSource[] sources)            : this(null, sources)        {        }        public ConfigurationBuilder(string basePath, params IConfigurationSource[] sources)        {            if (sources != null)            {                foreach (var singleSource in sources)                {                    Add(singleSource);                }            }            BasePath = basePath;        }        public IEnumerable<IConfigurationSource> Sources        {            ge
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜精品久久久久久人妖| 国产精品极品美女粉嫩高清在线| 日韩av电影在线免费播放| 欧美精品18videosex性欧美| 国产精品狼人色视频一区| 国产精品视频地址| 欧美激情一区二区三区成人| 最近2019好看的中文字幕免费| 日本亚洲欧美三级| 91精品啪aⅴ在线观看国产| 中文字幕亚洲字幕| 1769国产精品| 日韩高清电影免费观看完整版| 亚洲色无码播放| 在线观看精品自拍私拍| 亚洲天堂第二页| 国产综合视频在线观看| 日韩电影中文字幕| 欧美夫妻性生活视频| 久久久久亚洲精品成人网小说| 国产精品igao视频| 亚洲人线精品午夜| 亚洲最新视频在线| 一区二区三区四区视频| 久久av在线看| 中文字幕亚洲欧美一区二区三区| 在线国产精品视频| 久久久成人的性感天堂| 一区二区三区高清国产| 久久韩国免费视频| 日韩专区在线观看| 精品久久久久久国产91| 中文字幕日韩欧美| 亚洲风情亚aⅴ在线发布| 亚洲视频在线看| 亚洲人成在线免费观看| 欧美激情在线视频二区| 91天堂在线观看| 成年人精品视频| 国产精品白丝av嫩草影院| 日韩av黄色在线观看| 98精品国产高清在线xxxx天堂| 亚洲国产欧美一区二区三区同亚洲| xvideos成人免费中文版| 国产精品免费视频xxxx| 精品在线观看国产| 91在线观看免费观看| 国产亚洲精品久久久久久牛牛| www.xxxx精品| 亚洲free性xxxx护士白浆| 红桃视频成人在线观看| 日韩电影视频免费| 91精品国产高清| www国产亚洲精品久久网站| 久久精品国产一区二区三区| 亚洲欧美综合另类中字| 成人免费自拍视频| 一区二区三区久久精品| 亚洲精品一区在线观看香蕉| 亚洲一二三在线| 欧美成人精品一区二区三区| 亚洲在线免费观看| 欧美国产日产韩国视频| 成人性教育视频在线观看| 97在线视频国产| 成人黄色免费在线观看| 97欧美精品一区二区三区| 色综合色综合久久综合频道88| 亚洲美女www午夜| 日韩精品极品视频免费观看| 深夜福利一区二区| 日韩精品视频观看| 欧美极品少妇xxxxx| 亚洲高清一二三区| 欧美美女18p| 欧美有码在线观看视频| 91香蕉国产在线观看| 亚洲精品综合久久中文字幕| 亚洲国产高清自拍| 国产精品久久91| 欧美精品久久一区二区| 国产成人精品免费久久久久| 在线观看免费高清视频97| 精品久久久久久中文字幕| 欧美极度另类性三渗透| 欧美成aaa人片免费看| 久久久www成人免费精品张筱雨| 欧美午夜精品伦理| 91沈先生在线观看| 91免费在线视频网站| 国产裸体写真av一区二区| 成人免费在线网址| www.久久久久久.com| 日韩电视剧免费观看网站| 国产精品免费一区豆花| 日韩欧美综合在线视频| 国产91av在线| 国产精品久久久久久久久影视| 国产免费久久av| 国产精品网站入口| 国产精品久久久久999| 国内精品免费午夜毛片| 日韩成人在线网站| 成人亲热视频网站| 国产精品免费福利| 精品久久久久久亚洲精品| 91爱爱小视频k| 日韩有码片在线观看| 久久人人看视频| 欧美性猛交xxxx富婆弯腰| 国产精品对白刺激| 日本一区二区在线播放| 97精品国产97久久久久久| 午夜剧场成人观在线视频免费观看| 亚洲qvod图片区电影| 欧美精品久久久久久久久| 日韩av不卡电影| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩精品中文字幕| 久热精品视频在线观看一区| 欧美高清自拍一区| 久久精品国产精品亚洲| 亚洲成av人乱码色午夜| 国产精品99久久久久久www| 91理论片午午论夜理片久久| 91精品国产91久久| 国产精品18久久久久久麻辣| 在线精品国产欧美| 欧美亚洲国产视频| 欧美高清视频免费观看| 久久精品国产综合| 91伊人影院在线播放| 日韩视频在线一区| 国产成人精品久久二区二区| 国产视频久久久久| 日韩欧美国产网站| 国产一区二区三区在线播放免费观看| 久久夜色精品国产亚洲aⅴ| 成人免费福利在线| 久久综合九色九九| 日韩在线不卡视频| 中文字幕在线成人| 亚洲一区二区三区久久| 欧美激情视频三区| 欧美夫妻性生活xx| 亚洲一区二区三区四区视频| 国产欧美日韩91| 欧美大片在线看免费观看| 亚洲精品一区中文字幕乱码| 欧美老女人在线视频| 国产丝袜高跟一区| 亚洲欧美999| www.欧美免费| 欧美日韩免费区域视频在线观看| 免费不卡在线观看av| 久久激情视频免费观看| 日韩在线视频免费观看| 亚洲国产精品美女| 亚洲第一福利网| 国产成人97精品免费看片| 亚洲va电影大全| 国产又爽又黄的激情精品视频| 欧美成人剧情片在线观看| 欧美一级片免费在线|