转载动软项目DALFactory无法反射创建类实例的常见错误
2009-07-11 11:44
动软项目DALFactory无法反射创建类实例的常见错误 提供的基于接口和工厂模式的 三层架构示例项目代码时,经常会在DALFactory类厂部分出现无法反射创建类示例的错误。就网友来信询问最多的情况,在此作一个统一说明,如果你也遇到了同样的问题,请参考。 DALFactory源码: string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];//从web.config里获得数据层的程序集名 string CacheKey = path+".SysManage"; //程序集+类名,得到类的类型全名 object objType = DataCache.GetCache(CacheKey); //从缓存取 if (objType == null) //如果缓存没有 { try { objType = Assembly.Load(path).CreateInstance(CacheKey); //通过反射得到类对象 ( 经常出错行 ) DataCache.SetCache(CacheKey, objType);// 存入缓存 } catch(System.Exception ex) { string str=ex.Message; } } return (CodematicDemo.IDAL.ISysManage)objType; //类型转换 错误说明: 1.每一层是否是独立的程序集(也就是独立的项目) 因为Assembly.Load(path)这里的path必须是一个程序集的名称,而不是类命名空间的名称。 2.请检查数据层是否实现了接口。SQLServerDAL下面的具体类是否实现了接口的定义,如: 3.请检查程序集名称和命名空间不一致。 因为Assembly.Load(path)这里的path必须是一个程序集的名称 CreateInstance(CacheKey)这里的CacheKey其实是需要反射的类型全名(包括命名空间的全路径)。 所以,尽量让程序集名称和命名空间一致,这样的得到的类型全名=程序集名称+类名。 否则,你需要把CacheKey换成实际的类型全名。 4.请检查BLL层是否添加了SQLServerDAL的项目引用。 |
|