在产品项目进行中我们难免会遇到因为项目服务对象不同,实现也不同的功能。
这样每次修改后重新编译整个解决方案后更新耗时耗力。
其实使用静态工厂,我们可以很容易的引入额外的dll来动态的配置这些功能的实现
首先下面是所有工厂的基类,其中包含了一个读取配置文件的方法,和一个生成对象的静态方法
 代码
/// <summary> /// 所有工厂基类 ///<author name="Jan.David"></author> ///<![CDATA[2010-11-05]]> /// </summary>public abstract class AbstractFactory { /// <summary> /// 读取设置文件内的值 /// </summary> /// <param name="parentNode"></param> /// <param name="key"></param> /// <returns></returns> 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; } /// <summary> /// 实例化一个对象 /// </summary> /// <typeparam name="T">要实例化的类型</typeparam> /// <param name="ClassName">需要实例化的类名</param> /// <param name="obj">实例化对象存储的变量</param> public abstract void CreateInstanc<T>(string className,ref T obj); }

下面是具体的实现
 代码
配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <BillCode> <add name="Returns" value ="IBillCodeImplt.Returns"></add> </BillCode>
</configuration>
|