zoukankan      html  css  js  c++  java
  • 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

    然后在其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 )


     

  • 相关阅读:
    解读MSP430F169的头文件们
    解决编辑安装falkon中碰到缺少ecm问题
    vim基础普及
    本科2020专业目录
    cp 文件复制命令
    mkdir rmdir
    whereis ,which 文件查找
    gitlab软件的安装与使用
    如何节省数据库的成本
    innodb_undo_tablespaces参数引发的启动报错
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/12974621.html
Copyright © 2011-2022 走看看