使用反射技术动态创建类对象时引用其它项目中DAL的方法

    下午看到jumpsfire朋友问到了一个问题,在不同的项目中使用反射技术时,会出现错误提示。这里简单介绍一下不同项目中使用反射需要注意的地方。

    首先给出代码,如果反射代码需要被不同项目引用的话,那么在app.config(或web.config)中,需要增加一行参数。

<!--新增参数-->
<add key="ksRBAC_DALFile" value="ksRBAC.SQLServerDAL"/>
<!--原有参数,用于设置连接何种数据源-->
<add key="ksRBAC_DataAccessLayer" value="SQLServerDAL"/>

 

    类工厂代码如下:

namespace KoalaStudio.RBAC.ClassFactory
{
    
public sealed class DALFactory
    {
        
//数据访问层的DLL文件路径
        private static readonly string dalName = ConfigurationManager.AppSettings["ksRBAC_DALFile"].ToString();
        
///数据访问层的命名空间
        private static readonly string path = "KoalaStudio.RBAC." + ConfigurationManager.AppSettings["ksRBAC_DataAccessLayer"].ToString();

        
/// <summary>
        
/// 分组类工厂
        
/// </summary>
        
/// <returns></returns>
        public static IDAL.IGroupDAL CreateGroup()
        {
            
string className = path + ".GroupDAL";
            Assembly assm 
= Assembly.Load(dalName);
            Type objType 
= assm.GetType(className, true);
            
return (IDAL.IGroupDAL)Activator.CreateInstance(objType);
        }

        
/// <summary>
        
/// 操作类工厂
        
/// </summary>
        
/// <returns></returns>
        public static IDAL.IOperationDAL CreateOperation()
        {
            
string className = path + ".OperationDAL";
            Assembly assm 
= Assembly.Load(dalName);
            Type objType 
= assm.GetType(className, true);
            
return (IDAL.IOperationDAL)Activator.CreateInstance(objType);
        }
    }
}

 

    简单解释一下。

    这里与项目内引用的主要区别就是增加了一行代码“Assembly assm = Assembly.Load(dalName)”。这行代码的作用,是指定了需要加载的类所在的程序集的名称,这个名称是在项目的“属性”-“应用程序”-“程序集名称”中手工设定的。这样,在后面实例化的过程中,就避免了因程序分不清反射对象的位置而造成执行错误。

    为什么项目内反射不会出现这样的问题呢,其实项目内反射也应该加上这行代码制定具体程序集,但不加的话系统会默认反射的是本项目自己的程序集,所以缺少了这行代码也同运行通过。但是换了不同项目,却还是默认反射自己的程序集,自然就会出现这个问题了。

posted @ 2009-11-05 16:14  行一山人  阅读(520)  评论(5编辑  收藏  举报