最近采用工廠模式反射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。如圖:
第二步:通過命名空間.類名創建類的實例。
如果調試之后是這一步報錯,比如你在調用實例化后的類會報未將對象引用實例 那么原因是你的類名寫錯了或者是命名空間寫錯了。