zoukankan      html  css  js  c++  java
  • 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。如图:

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

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

  • 相关阅读:
    UVA 133 The Dole Queue
    HDOJ(HDU) 2103 Family planning(需要注意范围)
    HDOJ(HDU) 2097 Sky数(进制)
    HDOJ(HDU) 2093 考试排名(Arrays.sort排序、类的应用)
    HDOJ(HDU) 2091 空心三角形
    HDOJ(HDU) 2090 算菜价(简单水题、)
    HDOJ(HDU) 2088 Box of Bricks(平均值)
    HDOJ(HDU) 2083 简易版之最短距离(中位数)
    Java---常用基础面试知识点
    Java---练习(面试题) :字符串截取(2-最终版)
  • 原文地址:https://www.cnblogs.com/sunxi/p/5133461.html
Copyright © 2011-2022 走看看