您的位置:首页 > 编程语言 > C#

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: