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 ...
随机推荐
- 注解【Annotation】、反射
注解:Annotation是从JDK5.0开始引入的新技术.Annotation的作用:如果没有注解信息处理流程,则注解毫无意义)- 不是程序本身,可以对程序作出解释.(这一点,跟注释没什么区别)- ...
- 前端获取http和完整项目名
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+ ...
- STM32 ARM调试问题总结
文章转载自:http://xfjane.spaces.eepw.com.cn/articles/article/item/77908 基于ADS的ARM调试有关问题总结 1. 在添加文件的过程中你可 ...
- Redis07-Redis单节点容量问题,twemproxy,predixy的使用
Redis单节点容量问题 一.单节点容量问题 我们在实际场景中,往往遇上一个单节点容量问题. 1.进行业务拆分,数据分类 2.到了数据不能拆分的时候,可以进行数据分片 进行哈希取模(影响分布式下的扩展 ...
- Hive的视图和索引(九)
Hive的视图和索引 1.Hive Lateral View 1.基本介绍 Lateral View用于和UDTF函数(explode.split)结合来使用. 首先通过UDTF函数拆分成多行 ...
- NOIP2016 Day1 T2 天天爱跑步(树上差分,LCA)
原文链接 原题链接 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏 ...
- CSS基础学习-11.CSS伸缩盒(新版本)
- 小程序wx.showToast()方法实现文字换行
小程序wx.showToast()方法实现文字换行 在文字中间加上 '\r\n' 真机中生效 wx.showToast({ title: `换行前内容\r\n换行后内容`, icon: 'none' ...
- mysql修改数据存储路径报错处理
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'解决?: >>> vim ...
- Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)
kubectl top pod --all-namespaces Error from server (NotFound): the server could not find the request ...