由于项目中用到了反射,准备把各个类库都先写在配置文件中,然后读取配置文件,再对配置文件中配置的类库进行反射。

这样做的好处是各个类库保持独立,其中一个类库出现问题不会影响其他类库,更新项目时,只要更新单个DLL就可以了。

1. 首先看下配置文件怎样进行配置

在上面的配置文件中创建了自定义节点processors,然后在processors节点下面对应的是方法节点。

上面的项目中使用了两个方法,所以创建了两个节点。type表示程序集名称, method表示方法名称。

2.看下怎样使用配置文件

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. //返回配置文件中的节点名称和元数据信息
  4. IDictionary<String,MethodInfo> dic=LoadAppConfig(Application.StartupPath + "\\App.config");
  5. //测试GetInfo方法
  6. var mi = dic["GetInfo"];
  7. var obj = Activator.CreateInstance(mi.DeclaringType);
  8. object[] para={"hello"};//如果数组的长度和参数的个数不匹配,会报异常
  9. //返回方法结果值
  10. object result = mi.Invoke(obj, para);
  11. MessageBox.Show(result.ToString());
  12. }
  13. /// <summary>
  14. /// 读取配置文件
  15. /// </summary>
  16. /// <param name="path"></param>
  17. /// <returns></returns>
  18. private Dictionary<string, MethodInfo> LoadAppConfig(string filename)
  19. {
  20. var processors = new Dictionary<string, MethodInfo>();
  21. var xml = new XmlDocument();
  22. xml.Load(filename);
  23. foreach (XmlNode node in xml.SelectNodes("configuration/processors/*"))
  24. {
  25. if (node.NodeType != XmlNodeType.Element)
  26. continue;
  27. var method = node.Name;
  28. try
  29. {
  30. string typeName = node.Attributes["type"].Value;//程序集名称
  31. string methodName = node.Attributes["method"].Value;//方法名称
  32. var t = Type.GetType(typeName);
  33. var m = t.GetMethod(methodName);
  34. processors.Add(methodName, m);
  35. }
  36. catch (Exception e)
  37. {
  38. }
  39. }
  40. return processors;
  41. }

DEMO下载:http://download.csdn.net/detail/zx13525079024/4734769

http://blog.csdn.net/zx13525079024/article/details/8149517

c#根据配置文件反射的更多相关文章

  1. .Net配置文件——反射+配置文件存储类型实例

    配置文件+反射确实去除了选择语句的繁琐,带来了优美的赶脚! 首先改进了一下类(接上文): ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  2. objective c实现配置文件+反射

    1. 先写plist配置文件 plist写到resouce里面去 通过NSBundle把数据取plist读出来 2. 通过NSClassFromString创建类 NSClassFromString ...

  3. Java反射-简单应用

    为了程序更好的维护和扩展,在面向对象思维的世界里,首先是面向接口编程,然后我们应该把做什么和怎么做进行分离. 以下我将用一个开晚会的样例来演示一下,终于达到的效果是:工厂+反射+配置文件实现程序的灵活 ...

  4. JavaSE复习(八)反射和注解

    反射 框架设计的灵魂 框架:半成品软件.可以在框架的基础上进行软件开发,简化编码 反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 可以在程序运行过程中,操作这些对象. 可以解耦,提高程 ...

  5. C# 反射简单介绍

    原文:https://blog.csdn.net/wu1020300665/article/details/82958455 1.什么是反射 反射是.NET中的重要机制,通过反射,可以在运行时获得程序 ...

  6. day38 04-Spring加载配置文件

    Spring的工厂类ApplicationContext有两个子类:ClassPathXmlApplicationConext和FileSystemXmlApplication都可以用来加载配置文件. ...

  7. 基础-Junit单元测试_反射_注解

    一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...

  8. C# 基础知识-反射

    一.反射 1>反射的命名空间是System.Reflection 2>是.Net框架提供的帮助类库,读取并使用matedata 二.反射基本用法 举例如下 1>Assembly as ...

  9. Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCur ...

随机推荐

  1. python常用模块:sys、os、path、setting、random、shutil

    今日内容讲了3个常用模块 一.sys模块二.os模块三.os下path模块四.random模块五.shutil模块 一.sys模块 import sys #环境变量 print(sys.path) # ...

  2. Linux计划任务与压缩归档

    计划任务分为两种形式 第一种:定时性的:也就是例行,每隔一定的周期就要重复来做这个任务. 第二种:突发性的:临时决定,只执行一次的任务. 用到的命令有两个 at:它是一个可以处理仅执行一次的任务就结束 ...

  3. Spring mvc 初始化过程

    1.DispatcherServlet:获取servlet的name 2.XmlWebApplicationContext:获取contentConfigLocation的xml名称和namespac ...

  4. PAT Basic 1051 复数乘法 (15 分)

    复数可以写成 ( 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 1:也可以写成极坐标下的指数形式 (,其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 (. 现给定两 ...

  5. Python全部库整理

    库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...

  6. SQL语句 case ... when

    select 字段A, 字段B, CASE WHEN t.operate = 1 then 'aa'WHEN t.operate = 2 then 'bb'WHEN t.operate = 3 the ...

  7. 在ASP.NET MVC项目中使用极验验证(geetest)

    时间 2016-03-02 18:22:37 smallerpig 原文  http://www.smallerpig.com/979.html 主题 ASP.NET MVC   geetest开发体 ...

  8. Mybatis config.xml 配置

    <!-- xml标准格式 --><?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE ...

  9. elasticsearch启动时遇到的错误

    elasticsearch启动时遇到的错误 问题翻译过来就是:elasticsearch用户拥有的内存权限太小,至少需要262144: 解决: 切换到root用户 执行命令: sysctl -w vm ...

  10. Quartus 18 新手使用教程

    最近需要做个小作品,用到了Quartus 18,本人采用vhdl语言进行的开发,过程如下. 1.点击新建一个工程 ​ 2.选择工程保存的路径,填写工程名称 ​ 3.选择工程类型为空的工程 ​ 4.不添 ...