最近采用工厂模式反射DAL层出现一些问题,所以自己想写一下自己认为标准解决的思路和解决方法以备后用。
1.这是项目结构
2.这是DALFactory 反射代码
#region 创建对象(不使用缓存) /// <summary> /// 创建对象(不使用缓存) /// </summary> /// <param name="AssemblyPath"></param> /// <param name="ClassNamespace"></param> /// <returns></returns> private object CreateObjectNoCache(string AssemblyPath, string ClassNamespace) { try { Assembly assm = Assembly.Load(AssemblyPath);//第一步:通过程序集名称加载程序集 object objType =assm.CreateInstance(ClassNamespace);// 第二步:通过命名空间+类名创建类的实例。 return objType; } catch (Exception ex) { //LogOperate.WriteErrorLog("创建反射异常(不使用缓存)", ex); return null; } } #endregion
上面我把发射分成两步以方便进行调试:
第一步:通过程序集名称加载程序集(注意是程序集名,不是命名空间)
Assembly assm = Assembly.Load(AssemblyPath);
如果调试之后是在这一步报错:System.IO.FileNotFoundException: 未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。
那么原因有两个:
一,是你的程序集名称写错了,你的程序集名称可以通过项目—属性—应用程序 查看。
二,是在web网站或者Windows应用程序必须要引用你要反射的项目。
比如我这里的Windows应用程序是SxPM 必须要引用SQLServerDAL。如图:
第二步:通过命名空间.类名创建类的实例。
如果调试之后是这一步报错,比如你在调用实例化后的类会报未将对象引用实例 那么原因是你的类名写错了或者是命名空间写错了。
如果本文引用了你的文章而未注明,请及时联系我。