c#根据配置文件反射
由于项目中用到了反射,准备把各个类库都先写在配置文件中,然后读取配置文件,再对配置文件中配置的类库进行反射。
这样做的好处是各个类库保持独立,其中一个类库出现问题不会影响其他类库,更新项目时,只要更新单个DLL就可以了。
1. 首先看下配置文件怎样进行配置
在上面的配置文件中创建了自定义节点processors,然后在processors节点下面对应的是方法节点。
上面的项目中使用了两个方法,所以创建了两个节点。type表示程序集名称, method表示方法名称。
2.看下怎样使用配置文件
- private void button1_Click(object sender, EventArgs e)
- {
- //返回配置文件中的节点名称和元数据信息
- IDictionary<String,MethodInfo> dic=LoadAppConfig(Application.StartupPath + "\\App.config");
- //测试GetInfo方法
- var mi = dic["GetInfo"];
- var obj = Activator.CreateInstance(mi.DeclaringType);
- object[] para={"hello"};//如果数组的长度和参数的个数不匹配,会报异常
- //返回方法结果值
- object result = mi.Invoke(obj, para);
- MessageBox.Show(result.ToString());
- }
- /// <summary>
- /// 读取配置文件
- /// </summary>
- /// <param name="path"></param>
- /// <returns></returns>
- private Dictionary<string, MethodInfo> LoadAppConfig(string filename)
- {
- var processors = new Dictionary<string, MethodInfo>();
- var xml = new XmlDocument();
- xml.Load(filename);
- foreach (XmlNode node in xml.SelectNodes("configuration/processors/*"))
- {
- if (node.NodeType != XmlNodeType.Element)
- continue;
- var method = node.Name;
- try
- {
- string typeName = node.Attributes["type"].Value;//程序集名称
- string methodName = node.Attributes["method"].Value;//方法名称
- var t = Type.GetType(typeName);
- var m = t.GetMethod(methodName);
- processors.Add(methodName, m);
- }
- catch (Exception e)
- {
- }
- }
- return processors;
- }
DEMO下载:http://download.csdn.net/detail/zx13525079024/4734769
http://blog.csdn.net/zx13525079024/article/details/8149517
c#根据配置文件反射的更多相关文章
- .Net配置文件——反射+配置文件存储类型实例
配置文件+反射确实去除了选择语句的繁琐,带来了优美的赶脚! 首先改进了一下类(接上文): ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- objective c实现配置文件+反射
1. 先写plist配置文件 plist写到resouce里面去 通过NSBundle把数据取plist读出来 2. 通过NSClassFromString创建类 NSClassFromString ...
- Java反射-简单应用
为了程序更好的维护和扩展,在面向对象思维的世界里,首先是面向接口编程,然后我们应该把做什么和怎么做进行分离. 以下我将用一个开晚会的样例来演示一下,终于达到的效果是:工厂+反射+配置文件实现程序的灵活 ...
- JavaSE复习(八)反射和注解
反射 框架设计的灵魂 框架:半成品软件.可以在框架的基础上进行软件开发,简化编码 反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 可以在程序运行过程中,操作这些对象. 可以解耦,提高程 ...
- C# 反射简单介绍
原文:https://blog.csdn.net/wu1020300665/article/details/82958455 1.什么是反射 反射是.NET中的重要机制,通过反射,可以在运行时获得程序 ...
- day38 04-Spring加载配置文件
Spring的工厂类ApplicationContext有两个子类:ClassPathXmlApplicationConext和FileSystemXmlApplication都可以用来加载配置文件. ...
- 基础-Junit单元测试_反射_注解
一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...
- C# 基础知识-反射
一.反射 1>反射的命名空间是System.Reflection 2>是.Net框架提供的帮助类库,读取并使用matedata 二.反射基本用法 举例如下 1>Assembly as ...
- Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCur ...
随机推荐
- XDCTF2014 Writeup
Web50 猜谜语类题目?FLAG在图片中有一些字符的 ASCii值,拼起来就是FLAG. Web100 隐写术.使用工具 StegSolve,把任一颜色的bit0拼起来图片的最开始部分即为 fla ...
- 03:Java基础语法(二)
Java基础语法 Java运算符 算术运算符 运算符是一种特殊的符号,用以表示数据的运算.赋值和比较等.1.操作数:参与运算的数据 称为操作数.2.表达式:运算符和操作数的整体 称为表达式.单独的一个 ...
- BLE 5协议栈-链路层
文章转载自:http://www.sunyouqun.com/2017/04/page/3/ 链路层LL(Link Layer)是协议栈中最重要的一层. 链路层的核心是状态机,包含广播.扫描.发起和连 ...
- zencart批量插入TEXT文本属性attributes
有时候上传的产品与多级分类比较多,在后台添加文本属性如Name,Number等需要顾客自定义的内容就比较费神了.现在只需将以下代码保存为insert_attributes.php,变量$options ...
- java线程基础巩固---构造Thread对象你也许不知道的几件事
关于Thread的构造在JDK文档中如下: 之后会把上面所有的构造都会学习到,这次主要是去研究一下图上标红的默认构造,当然大家肯定对于它都有些不屑,这有啥可学的,不new一个然后start线程不就启动 ...
- yii\base\InvalidCallException The cookie collection is read only.
Invalid Call – yii\base\InvalidCallException The cookie collection is read only. 在使用Yii2进行cookie操作时会 ...
- 《编译原理》控制流语句 if 和 while 语句的翻译 - 例题解析
<编译原理>控制流语句 if 和 while 语句的翻译 - 例题解析 将 if 和 while 语句翻译成四元式 注:不同教材会有小差异,使用 _ 或者 - ,如果是 -,请注意区分 - ...
- 第八章 watch监听 85 computed-计算属性的使用和3个特点
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- CDOJ 1264 人民币的构造 区间问题+数论
人民币的构造 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status ...
- bzoj 4899 记忆的轮廓 题解(概率dp+决策单调性优化)
题目背景 四次死亡轮回后,昴终于到达了贤者之塔,当代贤者夏乌拉一见到昴就上前抱住了昴“师傅!你终于回来了!你有着和师傅一样的魔女的余香,肯定是师傅”.众所周知,大贤者是嫉妒魔女沙提拉的老公,400年前 ...