场景
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 )