『 天道酬勤 』 www.LiTianping.com 李天平的博客

君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  116 随笔 :: 18 文章 :: 1928 评论 :: 72 引用

       有些朋友在做我提供的基于接口和工厂模式的三层架构示例项目代码时,经常会在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的项目引用
       

  如果你发现还有其他问题,可以回贴,让大家都学习一下。


最新版下载:http://www.maticsoft.com/softdown.aspx


posted on 2006-02-18 23:20 李天平 阅读(7472) 评论(33)  编辑 收藏 所属分类: ASP.NET开发.Net代码自动生成器

评论

#1楼  2006-02-19 09:55 Hurry [未注册用户]
既然是1楼就抢下吧
  回复  引用    

#2楼  2006-02-19 10:03 Hurry [未注册用户]
一般这个项目不会同时使用多数据库 的吧
所以我把他们给合并了
  回复  引用    

#3楼  2006-02-19 12:10 雁儿飞飞      
因为Assembly.Load(path)这里的path必须是一个程序集的名称,而不是类命名空间的名称。

记得自己第一次使用工厂模式的时候也确实为此事耽误拉不少时间!
汗$%^&*
还是好好学习 天天向上吧
  回复  引用  查看    

#4楼  2006-02-19 19:31 周伟 [未注册用户]
关键字段能不能多增加几个,让可以选择的。

假如使用是否存在记录的时候,只通过一个id好像不太现实吧。

删除语句好像少了一个from
  回复  引用    

#5楼  2006-02-20 09:36 zkxp      
对项目发布这个始终没用起过啊。

是不是发布项目就导出了表中的所有生成。

但我一用就挂程序。能说明下么。之能一个表一个表的保存哦。

就只有选择代码输出功能。但那就要自己建项目,然后加入这些文件了。

生成DAL层似乎有不确切的地方。
所有的ID字段的都按ID来取值。如模型层里我的自动编号字段是AdmID但DAL层都是model.ID来取值的,要手动修改。
  回复  引用  查看    

#6楼  2006-02-20 15:47 poo [未注册用户]
这个问题我一直没得到解决,只有改用简单三层模式,等哪天解决了再换回工厂模式。我用的vs2005,现在petshop4.0已经发布,基于.net2.0的,很希望天平看看,发布一个支持.net2.0的。谢谢。
--------这么好用还提这么多要求,我是不是有些过分
  回复  引用    

#7楼  2006-02-20 16:10 [天道酬勤]      
@Hurry ,如果不用考虑扩展其他类型数据库,建议还是使用简单3层结构,因为反射从一定程度上有一些性能问题。
@周伟,这个问题确实需要自己根据实际情况修改条件部分啦。我以后考虑一个灵活的方式来解决这个问题。“删除语句少from”,SQLServer是允许这种写法的。
@zkxp,自动编号字段是AdmID但DAL层都是model.ID来取值的,请问你的是1.9.6吗,我测试了好像没有这个问题,你能具体说一下吗?
@poo,谢谢你一直的关注,基于.net2.0的版本正在开发中了。

  回复  引用  查看    

#8楼  2006-02-22 14:03 fangzh [未注册用户]
你给的DbToCodeDemo不是一个完整的源代码,而且也没有完整的把你的代码生成器生成的代码做成范例。希望能给个完整的范例好让初学的了解如何将代码生成运用到实践中。
  回复  引用    

#9楼  2006-02-22 15:48 poo [未注册用户]
很需要加入空值处理
  回复  引用    

#10楼  2006-03-01 15:11 yynice [未注册用户]
运行DbToCodeDemo进入后台管理时,左边的菜单管理项目点不了啊?
  回复  引用    

#11楼  2006-03-02 09:47 不错 [未注册用户]
恩,我在学习阶段,看了感觉不错
尤其是这个说明:objType = Assembly.Load(path).CreateInstance(CacheKey); // 经常出错行
昨天郁闷了一下午,才搞明白。
  回复  引用    

#12楼  2006-04-12 09:02 什么样 [未注册用户]
DataCache 从哪来的 好象没有这个命名空间

  回复  引用    

#13楼  2006-04-14 19:59 zkxp      
晕,第4点里BLL层怎么会直接引用到数据层去了。举的例子不是基于工厂模式的么。那第3点怎么又有接口层呢。
另。FACTORY层了少了DATACACHE文件啊。
  回复  引用  查看    

#14楼  2006-04-19 11:08 Peter9028 [未注册用户]
我搞了一上午,发现同样的错误,原来是在web的引用里要加入SqlserverDal.呵呵。
  回复  引用    

#15楼  2006-04-24 10:38 tianjj [未注册用户]
下载了DbToCodeDemo.rar,但没有数据库呀,楼主能不能提供。研究DBToCode。
  回复  引用    

#16楼  2006-05-16 14:20 FlyNow [未注册用户]
越看你越帅了.
  回复  引用    

我弄了一下午,工厂那里总是不对,在web页测试时 出现“ 未将对象引用设置到对象的实例“。 at jiayong.BLL.Down.GetModel(Int32 ID),不只怎么事,请求帮忙啊
  回复  引用    

#18楼  2006-05-17 09:00 -天道酬勤      
@fangzh,CodematicDemo只是一个示例项目,主要是让大家便于理解这个架构设计,里面的代码基本就是代码生成器生成的。
@yynice,你是否装了微软的iewebcontrols控件,我好像在说明了一再强调了。
@什么样,DataCache 可以通过导出文件导出,也可以自己去目录下复制那个文件,示例项目里也有这个文件。
@tianjj,我在说明里已经写了数据库就在文件夹里。
@langzifengsha,你的问题说的太简单,不知道你到底错在哪里了。

  回复  引用  查看    

事例代码网上下载的不能解压缩啊!!!
楼主有空麻烦将DEMO发给我,谢谢
seanxuan6@hotmail.com
  回复  引用    

#20楼  2006-08-08 15:44 mxm [未注册用户]
希望能给个完整的范例好让初学的了解如何将代码生成运用到实践中。
  回复  引用    

#21楼  2006-09-01 13:34 程序员取经      
System.NullReferenceException: 未将对象引用设置到对象的实例。
  回复  引用  查看    

生成DAL层似乎有不确切的地方
http://www.85sp.cn
http://www.39sp.com.cn
  回复  引用    

我使用的时候也是出现这种错误:"未将对象引用设置到对象的实例",
行 62: public KQ.Model.Department GetModel(int DeptId)
行 63: {
行 64: return dal.GetModel(DeptId);
行 65: }
行 66:
源文件: d:\codematic\kqweb\bll\department.cs 行: 64

怎么解决啊?
  回复  引用    

我试了很久还没有做清除(我建了个test项目),文中提到“每一层是独立的程序集”,那是不是要建BLL,IDAL,Model,SQLServerDal,DALFactory五个项目分别输出他们的形如BLL.dll的文件还是test.Bll.dll的?然后再引用到项目test下?
  回复  引用    

我发现你的2.0的生成器有好几个问题, 但是一直找不到发帖的地方,郁闷.
  回复  引用    

#26楼  2007-06-17 19:29 wangli [未注册用户]
项目运行时出现:Error while trying to run project: Unable to start debugging on the web server. The project is not configured to be debugged

如何解决
  回复  引用    

天道酬勤 你好。我按照你在这边文章中的介绍,一个一个的检查我的程序,完全符合你文章中的描述,怎么还是出现“未能加载文件或程序集“Seagolden.App.Manifest.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。 ”错误?请问应该如何做,才能解决这个错误呢?
  回复  引用    

#28楼  2007-09-26 10:32 terrym [未注册用户]
我的情况跟28楼一样,请问怎么解决啊
  回复  引用    

#29楼  2007-09-26 10:36 terrym [未注册用户]
objType = Assembly.Load(path).CreateInstance(CacheKey);//反射创建
程序运行到这里,就会报错,未能加载文件或程序集"**.SQLServerDAL"或它的一个依赖项。系统找不到指定的文件。
几乎所有的引用都添加了,还是出错,请问李老师该如何解决啊
  回复  引用    

#30楼  2008-05-27 17:19 鹏鹏_Lovely      
objType = Assembly.Load(path).CreateInstance(CacheKey);//反射创建
程序运行到这里,就会报错,未能加载文件或程序集"**.SQLServerDAL"或它的一个依赖项。系统找不到指定的文件。
几乎所有的引用都添加了,还是出错,请问李老师该如何解决啊
  回复  引用  查看    

#31楼  2008-05-27 17:25 鹏鹏_Lovely      
谢谢。弄了一天了啊。哈哈,终于弄好了哟。
  回复  引用  查看    

#32楼  2008-05-28 15:32 开心每一天ㄨ      
我得努力学习了~都不会..
  回复  引用  查看    

#33楼  2008-05-28 15:32 开心每一天ㄨ      
谢谢李老师的这个软件.我过段时间毕业后重新找工作.

肯定能用的上的..
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-05-09 21:27 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: