哪里有卖红花楹种子的?

小说:哪里有卖红花楹种子的?作者:华北更新时间:2019-04-24字数:54487

经常用手机知乎的朋友,可以关注.NET开源项目专栏:知乎.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

当前文章:http://scycxh.com/vz2f0.html

发布时间:2019-04-24 00:00:00

广西有种植竹柳的基地吗? 这里的地柏价格低到爆 哪里有麻叶绣线菊,偷偷告诉你一家又好又便宜的基地! 固土护坡植物有什么好选择? 草坪种子最佳种植季节是什么时候? 东北草坪草品种有哪些? 格桑花在第二年需要重新种植吗? 世界上最名贵的花卉有哪些呢? 适合北京种植的宿根花卉有哪些? 常见的短日照花卉有哪些?

99091 82998 26289 96729 92789 69685 37212 78077 36252 67746 30736 97161 26362 76150 94265 29467 44102 65278 50479 63396 10308 85999 97913

我要说两句: (0人参与)

发布