C#面向对象方式设置、读取应用配置
2018-02-05 17:20
344 查看
关注点:
1、用面向对象方式的方式(get,set)访问和设置配置项
2、“CallerMemberName”在.net 4以下的变通方式
最后一周了,大伙都进入过年模式了。身还在,心已远。最近事情不是很多,老是看闪存也是不对啊。于是想起来前几天看到的一篇文章:“在 .NET中,一种更方便操作配置项的方法”;于是跃跃欲试,尝试一下。结果遇到点问题,文章中使用了CallerMemberName属性来简化存取配置项时需要硬编码带上配置项的Key的问题,这个属性的用途就是标记在运行时自动获取属性名,但是这是.net 4.5以上才有的。由于我们做工控需要兼容工控机的老操作系统,.net一直是4.0。于是遇到兼容问题了。百度出来,发现杨中科老师的办法是使用StackTrace具体就是:“new StackTrace(true).GetFrame(1).GetMethod().Name”。于是对文章中的类进行了修改:
实现INotifyPropertyChanged接口是为了让界面绑定配置项时,配置项的值发生变化时界面刷新显示。
单看这篇文章是看不明白的,需要大伙移步原文看看。
1、用面向对象方式的方式(get,set)访问和设置配置项
2、“CallerMemberName”在.net 4以下的变通方式
最后一周了,大伙都进入过年模式了。身还在,心已远。最近事情不是很多,老是看闪存也是不对啊。于是想起来前几天看到的一篇文章:“在 .NET中,一种更方便操作配置项的方法”;于是跃跃欲试,尝试一下。结果遇到点问题,文章中使用了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)); } /// <summary> /// 配置类 /// </summary> /// <param name="configuration">配置</param> public ConfigSetting(Configuration configuration) { Configuration = configuration; } /// <summary> /// 当前配置 /// </summary> public Configuration Configuration { get; } public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// 获取当前程序配置 /// </summary> /// <param name="config"></param> /// <returns></returns> public static Configuration GetCurrentConfiguration() { return ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); } /// <summary> /// 返回指定的配置项的值 /// </summary> /// <param name="settingKey"></param> /// <returns></returns> 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; } /// <summary> /// 返回指定的配置项的值 /// </summary> /// <typeparam name="T">值类型</typeparam> /// <param name="settingKey"></param> /// <returns></returns> protected virtual T GetSettingValue<T>(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)); } } /// <summary> /// 为指定的配置项设置值 /// </summary> /// <param name="value"></param> /// <param name="settingKey"></param> 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(); } /// <summary> /// 返回指定的配置项的值 /// </summary> /// <param name="settingKey"></param> /// <returns></returns> public string GetSettingValueByKey(string settingKey) { return GetSettingValue(settingKey); } /// <summary> /// 返回指定的配置项的值 /// </summary> /// <param name="settingKey"></param> /// <returns></returns> public T GetSettingValueByKey<T>(string settingKey) { return GetSettingValue<T>(settingKey); } /// <summary> /// 为指定的配置项设置值 /// </summary> /// <param name="value"></param> /// <param name="settingKey"></param> public void SetSettingValueByKey(string settingKey, object value) { SetSettingValue(value, settingKey); NotifyPropertyChanged(settingKey); } }
实现INotifyPropertyChanged接口是为了让界面绑定配置项时,配置项的值发生变化时界面刷新显示。
单看这篇文章是看不明白的,需要大伙移步原文看看。
相关文章推荐
- 09_通过读取配置文件的方式来使用反射完成对实例对象方法调用
- 300.33通过读取配置文件方式来使用反射完成实例对象调用方法
- 反射的应用,读取properties配置文件中的数据(普通InputStream方式,类加载方式),再调用运行
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
- java反射应用-配置文件的方式实例化对象
- agruments应用——求出函数参数的总合&&css函数——设置/读取对象的属性&&当前输入框高亮显
- Enterprise Library深入解析与灵活应用(5):创建一个简易版的批处理执行器,认识Enterprise Library典型的配置方式和对象创建方式
- android 在应用的配置文件设置apk的安装路径,以下是安装到sdcard上的方式
- [原创]Enterprise Library深入解析与灵活应用(5):创建一个简易版的批处理执行器,认识Enterprise Library典型的配置方式和对象创建方式
- Unity_ini配置文件应用(用于读取或写入程序设置)
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- 将properties文件的配置设置为整个Web应用的全局变量实现方法
- 使用dom4j:读取spring配置文件,实例化bean对象并注入依赖对象
- javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点
- SpringMVC核心二(XML方式配置Spring应用)
- MyEclipse移动开发教程:设置所需配置的iOS应用(一)
- [连载]基于消息驱动的面向对象通用C/S应用框架(四)
- 运用IShellLink和IPersistFile创建快捷方式,设置或读取快捷方式信息
- 【Spring】 (3)注入方式读取各种配置
- Tomcat配置虚拟主机、配置web应用的几种方式