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

这样做的好处是各个类库保持独立,其中一个类库出现问题不会影响其他类库,更新项目时,只要更新单个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. DataTable To List<T> DataTable Linq学习笔记

    LINQ 查询适用于实现的数据源 IEnumerable<T>接口或System.Query.IQueryable接口. DataTable类默认是没有实现以上接口的. 所以要在DataT ...

  2. 微信小程序开发(二)创建一个小程序页面

    为了方便讲解,我们将上篇博客创建的小程序除了project.config.json和sitemap.json两个文件保留,其他全部删除(这两个文件存的是小程序的创建信息,删掉会有报错提示). 接下来我 ...

  3. C++堆排序算法的实现

    堆排序(Heap sort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点.堆排序可以用到上一次的 ...

  4. 第二章 Vue快速入门--14 使用v-model实现计算器的案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. IDEA部署Tomcat报错:No artifacts marked for deployment

    刚开始碰到这个问题还被坑了,搞了好半天...所以我准备记录一下,走的弯路就不说了,因为我没图

  6. pycharm中如何让两个项目并存

    之前总是打开一个,另外一个没有了,来回切换还要找最近的project.十分麻烦. 1.File下拉项中选择Settings 2.Settings设置界面打开Project下拉列表,选择“Project ...

  7. Java-Base64工具类

    /* * Base64 encoding and decoding. * Copyright (C) 2001-2004 Stephen Ostermiller * http://ostermille ...

  8. vue基本知识点概括

    目录 Vue 渐进式 JavaScript 框架 一.走进Vue 1.what -- 什么是Vue 2.why -- 为什么要学习Vue 3.special -- 特点 4.how -- 如何使用Vu ...

  9. 题解 小B的询问

    题面 解析 这就是道莫队模板啊啊!! 因此,似乎并没有什么好讲的. 莫队算法传送门 我们只需要将询问存下来, 离线处理就行了. 还是上代码吧: #include<bits/stdc++.h> ...

  10. Centos7搭建CDH6.0.1(单机版)

    一.前言. 学习大数据组件,最好的方式是直接参照官网.不过官网的教程也让我吃了一坑,在此记录一下.因在个人笔记本资源有限,在此安装为单机版安装 二.搭建. 1.1配置主机名 hostnamectl s ...