动软论坛安装使用交流示例项目与代码架构讨论 示例项目DALFactory无法反射创建类实例的常见错误

1  /  1  页   1 跳转 查看:3177

示例项目DALFactory无法反射创建类实例的常见错误

示例项目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的项目引用
     

  如果你发现还有其他问题,可以回贴,让大家都学习一下。
最后编辑admin 最后编辑于 2008-06-22 15:09:31
 

回复:CodematicDemo示例项目源码DALFactory无法反射创建类实例的常见错误说明

反射失败的还有一种原因是:web项目的bin下面没有SQLServerDAL.dll
Assembly.Load(path)需要加载该dll才能反射,没有这个文件就无法反射。
 

回复:CodematicDemo示例项目源码DALFactory无法反射创建类实例的常见错误说明

我的项目的确是每一层是独立的程序集,但每层我都加了最高层命名空间了。在objType = Assembly.Load(path).CreateInstance(CacheKey); 这句单步执行,两个参数都能拿到(好像)正确的值,但返回的objType 是NULL。。是怎么回事啊?
错误提示是:[Exception: 调用的目标发生了异常。]
  Hotsurface.DALFactory.DataAccess.CreateObject(String AssmeblyName, String CacheKey) in E:\成飞\MyProject (2)\DALFactory\DataAccess.cs:59
谢谢,谁能帮我解答下?
 

回复:CodematicDemo示例项目源码DALFactory无法反射创建类实例的常见错误说明

哦,问题解决了,哈哈,是因为我的Web.config里连接字符串设置的问题。搞了一下午终于查出问题来了。要注意哦。
最后编辑真奇异 最后编辑于 2008-04-10 16:49:28
 

回复: 示例项目DALFactory无法反射创建类实例的常见错误

项目中也出无法反射,最后解决方法物理路径:
public static string path=System.Web.HttpContext.Current.Server.MapPath(@"bin\SQLServerDAL.dll");
objType = Assembly.Load(path).CreateInstance(ClassNamespace);//反射创建
 

回复:示例项目DALFactory无法反射创建类实例的常见错误

未将对象的引用设置到对象的实例
出现这个问题
怎么办啊
一个星期了啊
 

回复:示例项目DALFactory无法反射创建类实例的常见错误

呵呵。写得好。受益非浅。
 
1  /  1  页   1 跳转

版权所有 动软.net代码生成器  Maticsoft  Sitemap

   Copyright © 2001-2008 Comsenz Inc.
Processed in 0.03125 second(s) , 4 queries. 京ICP备06044726号
返顶部