C#架构设计-程序运行时从xml配置文件中加载配置项并设置为全局变量

场景

C#中全局作用域的常量、字段、属性、方法的定义与使用:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102550025

在上面使用的全局作用域的类的基础上,如果某些设置需要存储在某个xml配置文件中,然后在程序启动后从配置文件中加载到全局的变量中并使用。

比如:

在磁盘下某目录中有一个xml配置文件FileSaveCfg.xml

<?xml version="1.0" encoding="utf-8"?>
<FileSaveCfg>

  <PreExportDataThreshold>500000</PreExportDataThreshold>

</FileSaveCfg>

 

那么需要在程序运行后就加载这个配置文件并获取500000这个配置项,然后我

就可以在程序的任意地方通过全局变量去获取这个500000配置项了。

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

为了实现程序运行后就加载配置文件的内容,打开项目下的Program.cs

C#架构设计-程序运行时从xml配置文件中加载配置项并设置为全局变量

 

 

C#架构设计-程序运行时从xml配置文件中加载配置项并设置为全局变量

然后在其Main方法中调用加载配置文件的配置项的方法,这里将此方法直接放在全局Global类中,参照上面的博客新建一个全局Global类,类中新建Init方法,然后在上面的Main方法中调用Init方法

 

   class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
  Global.Instance.Init();
        }
     }

 

然后来到Init方法中

        try
            {
                if (System.IO.File.Exists("d:\FileSaveCfg.xml"))
                {
                    System.Xml.XmlNode node = null;
                    string strValue = String.Empty;
                    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                    doc.Load(AppConfig.TestDataDirConfigFile);

                    node = doc.SelectSingleNode("./FileSaveCfg/PreExportDataThreshold");
                    if (node != null && node.FirstChild != null)
                    {
                        try
                        {
                            if (XmlHelper.GetFirstChildNodeValue(node, true, out strValue))
                            {
                                int.TryParse(strValue, out Global._instance._preExportDataThreshold);
                            }
                        }
                        catch (Exception ex)
                        {
                           Console.Write("从配置文件{0}中解析PreExportDataThreshold异常:" + ex.Message);
                        }
                    }
                    else
                    {
                        Console.Write("从配置文件{0}中不包含FileSaveCfg/PreExportDataThreshold节点!");
                    }

   }
                    
            }
            catch (Exception ex)
            {
                Console.Write("从实验目录所在配置文件中解析实验目录异常:" + ex.Message);
            }

其中用到的获取配置文件中节点的值调用了一个工具类中的方法GetFirstChildNodeValue代码如下:

        public static bool GetFirstChildNodeValue(System.Xml.XmlNode node, bool throwException, out string value)
        {
            value = string.Empty;
            try
            {
                value = node.FirstChild.Value.ToString();
            }
            catch (Exception ex)
            {
                if (throwException)
                {
                    throw (ex);
                }
                return false;
            }
            return true;
        }

其中通过

int.TryParse(strValue, out Global._instance._preExportDataThreshold);

将从配置文件中加载数据将其赋值给全局字段

Global._instance._preExportDataThreshold

在Global中定义全局私有字段

private int _preExportDataThreshold = 500000;

并且设置了一个默认值

然后再在Global中添加一个public的属性,用来对私有的属性进行读取

        public int PreExportDataThreshold
        {
            get { return _preExportDataThreshold; }
            set { _preExportDataThreshold = value; }
        }

然后就可以在程序的任何地方通过

Global.Instance.PreExportDataThreshold

来使用从配置文件中获取的这个配置项了。

比如:

 if (recordDataList.Count > Global.Instance.PreExportDataThreshold )

 

 


 

 

C#架构设计-程序运行时从xml配置文件中加载配置项并设置为全局变量

上一篇:windowserver中PowerShell禁止脚本执行的解决方法


下一篇:Leanote本地搭建-Windows