c#根据配置文件反射
2015-11-09 09:52
369 查看
由于项目中用到了反射,准备把各个类库都先写在配置文件中,然后读取配置文件,再对配置文件中配置的类库进行反射。
这样做的好处是各个类库保持独立,其中一个类库出现问题不会影响其他类库,更新项目时,只要更新单个DLL就可以了。
1. 首先看下配置文件怎样进行配置
在上面的配置文件中创建了自定义节点processors,然后在processors节点下面对应的是方法节点。
上面的项目中使用了两个方法,所以创建了两个节点。type表示程序集名称, method表示方法名称。
2.看下怎样使用配置文件
[html] view plaincopy
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
这样做的好处是各个类库保持独立,其中一个类库出现问题不会影响其他类库,更新项目时,只要更新单个DLL就可以了。
1. 首先看下配置文件怎样进行配置
在上面的配置文件中创建了自定义节点processors,然后在processors节点下面对应的是方法节点。
上面的项目中使用了两个方法,所以创建了两个节点。type表示程序集名称, method表示方法名称。
2.看下怎样使用配置文件
[html] view plaincopy
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#验证码
- C#第十二天
- C#中的域与属性
- C#RichTextBox[自动选词]与[生僻字显示]问题
- c# 类;一维数组;二维数组
- C#下Base64、MD5、AES加密
- C# List 的一些操作 (两List元素是否想同,List是否包含在另一个List中)
- c#操作.mpp文件
- C#学习笔记 反射
- C# WPF 使用Console.Write打印信息到控制台窗口中
- C#第十一天(winform)
- C#读取Excel的三种方式以及比较分析
- C#串口 Demo
- C#中利用委托实现多线程跨线程操作
- VS插件-GetSet生成器
- 参加微软黑客马拉松经历
- C#语言 数组
- 我看过的C#书籍
- C#的默认访问权限
- C#酒店管理系统(内部)业务逻辑