时间:2021-04-16
在做基于接口和工厂模式的三层架构示例项目代码时,经常会在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 (AdDesktop.IDAL.ISysManage)objType;
错误说明:
1.每一层是否是独立的程序集(也就是独立的项目)
因为Assembly.Load(path)这里的path必须是一个程序集的名称,而不是类命名空间的名称。
2.请检查数据层是否实现了接口。
SQLServerDAL下面的具体类是否实现了接口的定义,如:
3.请检查程序集名称和命名空间不一致。
因为Assembly.Load(path)这里的path必须是一个程序集的名称
CreateInstance(CacheKey)这里的CacheKey其实是需要反射的类型全名(包括命名空间的全路径)。
所以,尽量让程序集名称和命名空间一致,这样的得到的类型全名=程序集名称+类名。
否则,你需要把CacheKey换成实际的类型全名。
4.请检查BLL层是否添加了SQLServerDAL的项目引用。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
动态加载组件那就是简单的Assembly.Load动态加载dll而以。这网上资料也有不少。基本的思路基本上就是在本地上一个指定目录如【plugs】存在着一堆dl
AndroidXmlResourceParser出错解决办法今天有点懵逼,对接的pos机在debug模式下安装在手机上是木有报错的,然后打包出来就出错了。然后看
Android编译出错版本匹配问题解决办法解决问题的关键在于版本匹配,compileSdkVersioncompileSdkVersiontargetSdkVe
Ubuntu下开启php调试模式报错信息解决办法在Ubuntu下php的缺省设置是不显示错误信息的,如果程序出错会显示“无法处理此请求的错误提示”,这在开发环境
Python爬虫之超链接url中含有中文出错及解决办法python3.5爬虫错误:UnicodeEncodeError:'ascii'codeccan'tenc