zoukankan      html  css  js  c++  java
  • DbToCodeDemo示例项目源码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 (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


  • 相关阅读:
    ES6基础之——Set
    ES6基础之——继承extends
    ES6基础之——静态方法staitc
    ES6基础之——get 与 set
    ES6基础之——Class类
    ES6基础之——生成器Generators
    ES6基础之——迭代器Iterators
    ES6基础之——指向当前对象的原型对象 super
    ES6基础之——__proto__
    Vue慕课网音乐项目随手记--node代理及数据抓取
  • 原文地址:https://www.cnblogs.com/ltp/p/333295.html
Copyright © 2011-2022 走看看