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。如圖:

 

第二步:通過命名空間.類名創建類的實例。

如果調試之后是這一步報錯,比如你在調用實例化后的類會報未將對象引用實例 那么原因是你的類名寫錯了或者是命名空間寫錯了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM