• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
无忧岛主
实践是检验真理的唯一标准
博客园    首页    新随笔       管理    订阅  订阅
Assembly.Load(path).CreateInstance 反射出错解决办法

最近采用工厂模式反射DAL层出现一些问题,所以自己想写一下自己认为标准解决的思路和解决方法以备后用。

1.这是项目结构

2.这是DALFactory 反射代码

 #region 创建对象(不使用缓存)
        /// <summary>
        /// 创建对象(不使用缓存)
        /// </summary>
        /// <param name="AssemblyPath"></param>
        /// <param name="ClassNamespace"></param>
        /// <returns></returns>
        private object CreateObjectNoCache(string AssemblyPath, string ClassNamespace)
        {
            try
            {
                Assembly assm = Assembly.Load(AssemblyPath);//第一步:通过程序集名称加载程序集
                object objType =assm.CreateInstance(ClassNamespace);// 第二步:通过命名空间+类名创建类的实例。
                return objType;
            }
            catch (Exception ex)
            {
                //LogOperate.WriteErrorLog("创建反射异常(不使用缓存)", ex);
                return null;
            }
        }
        #endregion

 

上面我把发射分成两步以方便进行调试:

第一步:通过程序集名称加载程序集(注意是程序集名,不是命名空间)

Assembly assm = Assembly.Load(AssemblyPath);

如果调试之后是在这一步报错:System.IO.FileNotFoundException: 未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。

那么原因有两个:

一,是你的程序集名称写错了,你的程序集名称可以通过项目—属性—应用程序 查看。

二,是在web网站或者Windows应用程序必须要引用你要反射的项目。

比如我这里的Windows应用程序是SxPM 必须要引用SQLServerDAL。如图:

 

第二步:通过命名空间.类名创建类的实例。

如果调试之后是这一步报错,比如你在调用实例化后的类会报未将对象引用实例 那么原因是你的类名写错了或者是命名空间写错了。

 

如果本文引用了你的文章而未注明,请及时联系我。
posted on 2016-01-15 15:34  无忧岛主  阅读(2877)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3