C# 利用反射机制动态构建配置文件中类的对象

C# 利用反射机制动态构建配置文件中类的对象



在产品项目进行中我们难免会遇到因为项目服务对象不同,实现也不同的功能。

这样每次修改后重新编译整个解决方案后更新耗时耗力。

其实使用静态工厂,我们可以很容易的引入额外的dll来动态的配置这些功能的实现

 

首先下面是所有工厂的基类,其中包含了一个读取配置文件的方法,和一个生成对象的静态方法

 

代码
 
  /// 
    /// 所有工厂基类
    ///
    ///
    /// 
public abstract class AbstractFactory { /// /// 读取设置文件内的值 /// /// /// /// public static string ReadSettring( string parentNode, string key) { string FilePath = AppDomain.CurrentDomain.BaseDirectory; // 项目路径 // 新建xml文档对象 System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); // 读取文档 doc.Load(FilePath + " /Setting.xml "); // 获取根节点 System.Xml.XmlNodeList Root = doc.FirstChild.NextSibling.ChildNodes; System.Xml.XmlNodeList nodes = default(System.Xml.XmlNodeList); foreach (System.Xml.XmlNode node in Root) { if (node.Name.ToLower() == parentNode.ToLower()) { nodes = node.ChildNodes; break; } } if (nodes != null && nodes.Count > 0) { foreach (System.Xml.XmlNode node in nodes) { if (node.Attributes[ " name "].Value.ToLower() == key.ToLower()) { return node.Attributes[ " value "].Value; } } } return null; } /// /// 实例化一个对象 /// /// 要实例化的类型 /// 需要实例化的类名 /// 实例化对象存储的变量 public abstract void CreateInstanc( string className, ref T obj); }

 

下面是具体的实现

 

 

代码
 class BillCodeFactory : AbstractFactory
    {
        #region 属性
        private static string RETURNS = ReadSettring("BillCode", "Returns");//销售退货
        #endregion

        /// 
        /// 实例化一个对象
        /// 
        /// 要实例化的类型
        /// 需要实例化的类名
        /// 实例化对象存储的变量
        public override void CreateInstanc(string className, ref T obj)
        { 
            obj = 
              (T)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(
              className, false);
        }
        public string Returns
        {
            get
            {
                return ReadSettring("BillCode", "Returns");
            }
        }
}

 

 

配置文件

 

xml version="1.0" encoding="utf-8" ?>
<configuration>
  <BillCode>
    <add name="Returns" value ="IBillCodeImplt.Returns">add>
  BillCode>

configuration>

你可能感兴趣的:(C# 利用反射机制动态构建配置文件中类的对象)