如果用知乎,可以关注专栏:.NET开源项目

记得5年前开始拼命翻读X组件的源码,特别是XCode,但对Newlife.Core 的东西了解很少,最多只是会用用,而且用到的只是九牛一毛。里面好用的东西太多了。

最近一年时间,零零散散又学了很多,也了解了很多,不会写那总要学会用吧,今天就给大家介绍里面非常好用的自定义配置文件用法。

X组件的介绍我就不多说了,看这里多年前系列文章:

说明:文章是多年前的,但这些年变动也很大,最好看看源码,基本用法都还差不多。

.NET开源文章目录:本博客.NET开源项目文章目录

本文原文地址:.NET平台开源项目速览(20)Newlife.Core中简单灵活的配置文件

1.关于配置文件

说道配置文件,大家觉得太平凡和普通了,有人说有App.Config本来就可以用,何必搞这么多灰机。

可是飞机类型也很多,有空何必不尝试一下这个型号的飞机。

实际上App.Config里面对自定义的配置不太适合,加一堆,多了看起来也难受。而且有时候不同外部组件可能也带配置文件,多了就分不清楚了。

还有很多系统的配置可能需要及时生效(在不需要重新启动的情况下),以及程序中使用的简单,灵活性,也是一个重点。。。

吹了这么多水,那来看点实际的,看看Newlife.Core里面的配置文件有啥新东东。

2.Newlife.Core的配置功能

我总结的这个配置文件最大的优点:

1.开发过程中建立一个配置文件非常方便。集成,加属性,加默认值,如果有其他逻辑,补充一下。

2.使用极其方便,通过XXX类名.Current.属性名 就可以直接对配置项进行读写。

3.修改及时生效,可以设置生效时间,这样很多情况下,程序不用重启配置就能及时生效。

4.程序启动如果发现没有该配置项目,会自动新建默认配置文件。与XCode的反向工程异曲同工。

5.支持列表,字典等复杂数据结构。

6.代码注释和XML文件的注释匹配。

下面看看使用Demo:

3.Newlife.Core的配置的玩法

3.1 新建配置文件类

来个案例:加上要给一个应用程序加一个增加一个自定义配置文件:

配置项有(纯属虚构,不要纠结):

Debug(是否调试模式)

BatchSize(每批次处理的数据记录数),

ServiceName(服务名称)

CacheTime(缓存清理时间)

UserList(要监控的用户列表)

KvDemo(键值对)

首先,新建一个配置类:AppSet,代码如下(一般就是复制一份):

    /// <summary>应用自定义配置</summary>[Description("应用自定义配置")][XmlConfigFile("Config/AppSet.config", 3000)]public class AppSet : XmlConfig{/// <summary>调试开关。默认false</summary>[Description("调试开关。默认false")]public Boolean Debug { get; set; } = false;/// <summary>每批次处理的数据记录数</summary>[Description("每批次处理的数据记录数")]public Int32 BatchSize { get; set; } = 20000;/// <summary>服务名称</summary>[Description("服务名称")]public String ServiceName { get; set; } = "AppServer";/// <summary>缓存清理时间</summary>[Description("服务数据处理的线程数,32")]public DateTime CacheTime { get; set; } = DateTime.Now.AddHours(5);/// <summary>要监控的用户ID列表</summary>[Description("要监控的用户ID列表")]public List UserList { get; set; } = new List() { 123,23,98,38};/// <summary>键值对</summary>[Description("键值对")]public Dictionary<Int32, string> KvDemo { get; set; } = new Dictionary<int, string>(){ { 1,"aaa"},{2,"bbb"},{ 3,"ccc"} };}

配置文件说明:

1.类的特性:Description是整个XML配置文件的注释,XmlConfigFile定义文件位置和名称,以及生效时间3000ms

2.属性中的Description特性也是对该属性的说明(都会写入配置文件),至于注释大家都知道,智能提示有用

3.对属性的赋值是配置的默认值,程序启动第一次使用该类,如果配置文件不存在,就会自动采用这里的值创建,否则以存在的文件值为准

4.程序中可以动态修改和保存配置。

3.2 配置文件使用

每个配置文件都有一个静态的Current属性,通过静态对象来对整个配置文件进行操作。例如

  var name = AppSet.Current.ServiceName ;//读取配置AppSet.Current.ServiceName = "TestName";//设置配置AppSet.Current.Save();//配置保存,有异步方法,程序中动态进行

如果程序第一次使用该配置类,在bin目录的Config文件夹,就会生成一个名称为AppSet.config的配置文件。如下图:

由于Newlife本身也有一些配置类,所以也会自动生成在该目录,习惯都放在一起,也可以通过类特性修改保存路径。打开AppSet.config,内容如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!--应用自定义配置-->
 3 <AppSet>
 4   <!--调试开关。默认false-->
 5   <Debug>false</Debug>
 6   <!--每批次处理的数据记录数-->
 7   <BatchSize>20000</BatchSize>
 8   <!--服务名称-->
 9   <ServiceName>TestName</ServiceName>
10   <!--缓存清理时间-->
11   <CacheTime>2018-02-26 01:28:00</CacheTime>
12   <!--要监控的用户ID列表-->
13   <UserList>
14     <!--要监控的用户ID列表-->
15     <Int32>123</Int32>
16     <!--要监控的用户ID列表-->
17     <Int32>23</Int32>
18     <!--要监控的用户ID列表-->
19     <Int32>98</Int32>
20     <!--要监控的用户ID列表-->
21     <Int32>38</Int32>
22   </UserList>
23   <!--键值对-->
24   <KvDemo>
25     <Comparer />
26     <Count>3</Count>
27     <Keys>
28       <Count>3</Count>
29     </Keys>
30     <Values>
31       <Count>3</Count>
32     </Values>
33   </KvDemo>
34 </AppSet>

仔细对照上面类的设置,一目了然。所以做一个这样的配置分分钟的事情。这里字典也支持,其实还支持类对象,可以把所有属性都给配置进行。

就不一一演示了,下面我们看看配置如何动态生效。

3.3 配置动态生效

下面,我们来做一个小实验,程序启动后,间隔7s来读取一次配置文件(配置文件3000毫秒检测一次变化),然后手动到目录下去修改配置文件中的值,

代码如下:

XTrace.UseConsole();
while(true)
{XTrace.WriteLine(AppSet.Current.ServiceName);//休眠7000毫秒,重新获取System.Threading.Thread.Sleep(7000);
}

结果如下:

可以看到配置的服务名称修改后,日志打印出有更新,重新加载,并继续打印出修改后的值。

4.底层源码实现

配置文件泛型基类源代码位置在 NewLife.Core/Xml/XmlConfig.cs ,对泛型的使用很常见,但对泛型基类使用出神入化,我见到最多的就是在X组件里面。非常牛逼的一个东西,我只会其皮毛,作者@大石头才是码神。

由于该配置文件基于XML文件,所以有几个辅助类。核新的代码主要是加载,和保存等逻辑,和上面功能一直,如果想学习,建议代码down下来,调试一遍。

5.相关资源

Newlife组件地址:https://github.com/NewLifeX/X

本文演示代码地址:https://github.com/asxinyu/NewlifeDemo

转载于:https://www.cnblogs.com/asxinyu/p/dotnet_Opensource_Newlife_Config.html

.NET平台开源项目速览(20)Newlife.Core中简单灵活的配置文件相关推荐

  1. .NET平台开源项目速览(1)SharpConfig配置文件读写组件

    原文:.NET平台开源项目速览(1)SharpConfig配置文件读写组件 在.NET平台日常开发中,读取配置文件是一个很常见的需求.以前都是使用System.Configuration.Config ...

  2. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  3. .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...

  4. .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用

    原文:.NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了 ...

  5. .NET平台开源项目速览(2)Compare .NET Objects对象比较组件

    原文:.NET平台开源项目速览(2)Compare .NET Objects对象比较组件 .NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比 ...

  6. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  7. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    .NET平台开源项目速览(4).NET文档生成工具ADB及使用 原文:.NET平台开源项目速览(4).NET文档生成工具ADB及使用 很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习 ...

  8. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  9. .NET平台开源项目速览(12)哈希算法集合类库HashLib

    阅读目录 1.哈希算法介绍 2.HashLib功能介绍 .NET的System.Security.Cryptography命名空间本身是提供加密服务,散列函数,对称与非对称加密算法等功能.实际上,大部 ...

最新文章

  1. CS131专题-8:图像纹理
  2. R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战
  3. 独家 | PyCaret 2.1横空出世-有什么新的内容?
  4. Android系统SVC命令教程
  5. linux环境双网卡主机路由配置
  6. oracle设置导出权限,Oracle 创建 删除 用户 导出 导入 分配权限
  7. 中国中文信息学会:第一届自然语言生成与智能写作大会讲习班正式发布
  8. 中文简体字-繁体字转换 WEB 服务(源代码)
  9. 机器学习 深度学习 ai_如何学习机器学习和人工智能?
  10. C++ STL 乱序算法
  11. Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出?
  12. Javascript预解析、作用域、作用域链
  13. org.apache.struts2.json.JSONWriter can not access a member of class
  14. Objective-c的内存管理MRC与ARC
  15. 自动驾驶—— Image Caption的学习笔记
  16. #翻译#将像素绘制到屏幕上
  17. 分类 迁移学习_迁移学习时间序列分类
  18. 也谈怎么学好英语这件小事(转)
  19. c语言编写cad建筑画图程序,CAD建筑平面图绘图步骤试题.doc
  20. 搜狗收录域名的方法及工具

热门文章

  1. iterm2 快捷键大全 Mac item2常用快捷键
  2. Java接口(温宁原创)
  3. 2020年河南成人高考各科目快速备考方法
  4. 渐开线齿廓的加工原理
  5. 2023年测试工程师核心竞争力?功能到自动化测试开发收割28k的offer...
  6. 社会名流问题算法详细复杂度分析
  7. 【对讲机的那点事】酒店通信数字调度管理系统的搭建
  8. 网站开发相关术语发音
  9. 计算机毕设(附源码)JAVA-SSM基于Java的新冠疫苗预约系统
  10. HTC VIVE 基础开发1