分享

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

 NaturalWill 2014-05-19

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

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

其实使用静态工厂,我们可以很容易的引入额外的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>
复制代码

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多