博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#面向对象方式设置、读取应用配置
阅读量:5135 次
发布时间:2019-06-13

本文共 3635 字,大约阅读时间需要 12 分钟。

关注点

  • 1、用面向对象方式的方式(get,set)访问和设置配置项
  • 2、“CallerMemberName”在.net 4以下的变通方式

最后一周了,大伙都进入过年模式了。身还在,心已远。最近事情不是很多,老是看闪存也是不对啊。于是想起来前几天看到的一篇文章:“”;于是跃跃欲试,尝试一下。结果遇到点问题,文章中使用了CallerMemberName属性来简化存取配置项时需要硬编码带上配置项的Key的问题,这个属性的用途就是标记在运行时自动获取属性名,但是这是.net 4.5以上才有的。由于我们做工控需要兼容工控机的老操作系统,.net一直是4.0。于是遇到兼容问题了。百度出来,发现杨中科老师的办法是使用StackTrace具体就是:“new StackTrace(true).GetFrame(1).GetMethod().Name”。于是对文章中的类进行了修改:

public abstract class ConfigSetting : INotifyPropertyChanged    {        private void NotifyPropertyChanged(string property)        {            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));        }        ///         /// 配置类        ///         /// 配置        public ConfigSetting(Configuration configuration)        {            Configuration = configuration;        }        ///         /// 当前配置        ///         public Configuration Configuration        {            get;        }        public event PropertyChangedEventHandler PropertyChanged;        ///         /// 获取当前程序配置        ///         ///         /// 
public static Configuration GetCurrentConfiguration() { return ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); } /// /// 返回指定的配置项的值 /// /// ///
protected virtual string GetSettingValue(string settingKey = null) { if (string.IsNullOrEmpty(settingKey)) settingKey = new StackTrace(true).GetFrame(1).GetMethod().Name.Replace("get_", ""); return Configuration?.AppSettings?.Settings[settingKey]?.Value; } /// /// 返回指定的配置项的值 /// ///
值类型
/// ///
protected virtual T GetSettingValue
(string settingKey = null) { if (string.IsNullOrEmpty(settingKey)) settingKey = new StackTrace(true).GetFrame(1).GetMethod().Name.Replace("get_", ""); var value = GetSettingValue(settingKey); if (string.IsNullOrWhiteSpace(value)) { return default(T); } else { return (T)Convert.ChangeType(value, typeof(T)); } } ///
/// 为指定的配置项设置值 /// ///
///
protected virtual void SetSettingValue(object value, string settingKey = null) { if (string.IsNullOrEmpty(settingKey)) settingKey = new StackTrace(true).GetFrame(1).GetMethod().Name.Replace("set_", ""); Configuration.AddOrUpdateAppSettingItem(settingKey, value?.ToString()); NotifyPropertyChanged(settingKey); Configuration.Save(); } ///
/// 返回指定的配置项的值 /// ///
///
public string GetSettingValueByKey(string settingKey) { return GetSettingValue(settingKey); } ///
/// 返回指定的配置项的值 /// ///
///
public T GetSettingValueByKey
(string settingKey) { return GetSettingValue
(settingKey); } ///
/// 为指定的配置项设置值 /// ///
///
public void SetSettingValueByKey(string settingKey, object value) { SetSettingValue(value, settingKey); NotifyPropertyChanged(settingKey); } }

  实现INotifyPropertyChanged接口是为了让界面绑定配置项时,配置项的值发生变化时界面刷新显示。

单看这篇文章是看不明白的,需要大伙移步原文看看。

 

转载于:https://www.cnblogs.com/datacool/p/datacool_2018_appconfig.html

你可能感兴趣的文章
composer 国内镜像配置
查看>>
软件是天时、地利、人和的产物!
查看>>
python定时清空本目录下除本脚本外的全部文件
查看>>
【PHP】在目标字符串指定位置插入字符串
查看>>
【JS】jQuery设置定时器,访问服务器(PHP示例)配合微信、支付宝原生支付,跳转web网页...
查看>>
实验四2
查看>>
VS2012+Win7网站发布详细步骤
查看>>
Android现学现用第十一天
查看>>
Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
查看>>
多路复用
查看>>
python 列表
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Django组件--cookie与session
查看>>
12. javacript高级程序设计-DOM2和DOM3
查看>>
Centos7安装vsftpd (FTP服务器)
查看>>
当前主流读取Excel技术对比
查看>>
js-格式化数字保留两位小数-带千分符
查看>>
【Java】forward & redirect 的差异
查看>>
Java学习笔记--字符串和文件IO
查看>>
【BZOJ1951】古代猪文(CRT,卢卡斯定理)
查看>>