• c#根据配置文件反射


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

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

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

           

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

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

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

         

    [html] view plaincopy
     
    1. private void button1_Click(object sender, EventArgs e)  
    2.        {  
    3.            //返回配置文件中的节点名称和元数据信息  
    4.            IDictionary<String,MethodInfodic=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.   
    14.        /// <summary>  
    15.        /// 读取配置文件  
    16.        /// </summary>  
    17.        /// <param name="path"></param>  
    18.        /// <returns></returns>  
    19.        private Dictionary<string, MethodInfo> LoadAppConfig(string filename)  
    20.        {  
    21.            var processors = new Dictionary<string, MethodInfo>();  
    22.            var xml = new XmlDocument();  
    23.            xml.Load(filename);  
    24.   
    25.            foreach (XmlNode node in xml.SelectNodes("configuration/processors/*"))  
    26.            {  
    27.                if (node.NodeType != XmlNodeType.Element)  
    28.                    continue;  
    29.   
    30.                var method = node.Name;  
    31.                try  
    32.                {  
    33.                    string typeName = node.Attributes["type"].Value;//程序集名称  
    34.                    string methodName = node.Attributes["method"].Value;//方法名称  
    35.                    var t = Type.GetType(typeName);  
    36.                    var m = t.GetMethod(methodName);  
    37.                    processors.Add(methodName, m);  
    38.                }  
    39.                catch (Exception e)  
    40.                {  
    41.                     
    42.                }  
    43.            }  
    44.            return processors;  
    45.        }  


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

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

  • 相关阅读:
    Editor HDU
    Out of Sorts II
    庭师的利刃
    HDU 2087: 剪花布条
    【高精度】高精度乘法
    【高精度】高精度数除以低精度数I
    【高精度】高精度阶乘
    【高精度】高精度分数
    【高精度】简单高精度减法
    【高精度】简单高精度加法
  • 原文地址:https://www.cnblogs.com/tianciliangen/p/4949099.html
Copyright © 2020-2023  润新知