关注点

  • 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接口是为了让界面绑定配置项时,配置项的值发生变化时界面刷新显示。

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

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

C#面向对象方式设置、读取应用配置相关推荐

  1. IIS7 设置读取、脚本和可执行文件的执行权限的步骤

    这篇文章主要介绍了IIS7 设置读取.脚本和可执行文件的执行权限的步骤,需要的朋友可以参考下 对IIS服务器,通过配置功能权限可以设置访问策略,访问策略指定 IIS 中 Web 服务器.站点.应用程序 ...

  2. SSM—Spring框架,IOC理论推导,Hello Spring,IOC创建对象方式,Spring的配置,DI(依赖注入)

    文章目录 1.Spring 1.1.Spring简介(了解) 1.2.spring优点 1.3.组成(七大模块) 1.4.拓展 2.IOC理论推导 2.1.IOC本质 3.Hello Spring 4 ...

  3. java读取ES配置生成ES管理类,获取ES连接

    java读取ES配置生成ES管理类,获取ES连接 1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询, ...

  4. springboot 读取nacos配置的流程和数据变化实时更新机制

    一.NACOS配置如下 1.bootStrap.yaml 配置 spring:profiles:active: devapplication:name: newdaycloud:nacos:disco ...

  5. IOC操作Bean管理注解方式(组件扫描配置)

    IOC操作Bean管理注解方式(组件扫描配置) 开启组件扫描的 细节配置 约定那些类可以扫描,哪些类不可以扫描 bean1.xml配置如下: <?xml version="1.0&qu ...

  6. SpringCloud Alibaba - Nacos 作为配置中心 读取Properties配置信息

    SpringCloud Alibaba是阿里巴巴致力于对微服务的管理.配置.注册等一整套的解决方案. 简介 Nacos 提供用于存储配置和其他元数据的 K-V 存储,为分布式系统中的外部化配置提供服务 ...

  7. 老毛子的二级路由,通过无线中继方式设置与主路由在同一网段

    以极路由作为示例root过程各有不同step3开始其他路由器也适用 **Step1: **路由器复位,有线/无线连接路由器进入后台(192.168.199.1/hiwifi.com),设置WiFi联网 ...

  8. [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务

    在Linux上部署Java开发环境笔记(一) -- 补充:Linux下如何手动设置IP及配置DNS服务 2010/06/17 有的Linux系统会有网络设置的图形操作界面,比如"红旗Linu ...

  9. 任务1、采用面向对象方式求三角形面积

    文章目录 任务1.采用面向对象方式求三角形面积 (一)编程实现 1.采用面向过程的思路 2.采用面向对象的思路 (二)讲解知识点 (三)拓展练习 任务1.创建学生类并测试 任务2.采用面向对象求解一元 ...

最新文章

  1. 生产环境中配置的samba
  2. 不要轻易修改ESX主机的主机名
  3. mysql-备份及关联python
  4. Django入门 -- 框架操作基本流程
  5. 安全数据科学家的日常:需要做什么?将面对哪些挑战?
  6. Protobuf报错Protocol message tag had invalid wire type
  7. ubuntu安装msql5.7
  8. CTF:攻防世界web PART01
  9. android ndk配置环境,在Windows中的安装Android NDK开发环境
  10. 编写Oracle简单的存储过程
  11. 一些代码规范(收集)
  12. Websocket 从header读取数据
  13. Django图书商城项目/图书管理/毕业设计
  14. 【转】胡侃学习(理论)计算机
  15. pytorch geometric GraphSAGE代码样例reddit和ogbn_products_sage,为何subgraph_loader将sizes设成[-1]
  16. linux 可道云_Aria2+KodExplorer可道云实现离线下载
  17. java计算机毕业设计教师管理系统源码+mysql数据库+系统+lw文档+部署
  18. 解决微软Edge浏览器和IE浏览器下载无反应的问题
  19. 基于pgpool-II读写分离+postgresql10主从从流复制高可用部署方案
  20. 很火的华为太空表网站源码

热门文章

  1. android layout 开关,Android多状态开关
  2. 戏说前端 JavaScript 之『防抖节流』基础知识
  3. Ubuntu安装ASIO开发库
  4. NIOS II 常见问题总结FAQ - xiangyuqxq的专栏 - CSDN博客
  5. Rust —— 一门没有GC的语言
  6. 走在网页游戏开发的路上——页游资源管理
  7. 关于C++宏:AFX_EXT_CLASS
  8. PHP异步调用实现方式
  9. 知名网游Server端架构分析
  10. XNA or Silverlight for Windows Phone 7 game