使用C#的反射機制時遇到的問題

項目DALFactory是采用工廠模式設計的,設計模式的書我也曾看過Java的設計模式,理解也不太深刻,但對工廠模式還是較爲熟悉,使用它可以根據需求返回不同的實例對象,在DALFactory項目中使用反射機制來實現依賴注入,當然,它的實現還是沒有java中的spring那樣靈活,強大,部分代碼如下:

// <summary>

/// 抽象工廠模式創建DAL。

/// Web.config 需要加入配置:(利用工廠模式+反射機制+緩存機制,實現動態創建不同的數據層對象接口)

/// DataCache類在導出代碼的文件夾裏

/// 可以把所有DAL類的創建放在這個DataAccess類裏

/// <appSettings>

/// <add key="DAL" value="SmsSystem.SQLServerDAL" /> (這裏的命名空間根據實際情況更改爲自己項目的命名空間)

/// </appSettings>

/// </summary>

public sealed class DataAccess

{

private static readonly string path = ConfigurationManager.AppSettings["DAL"];

/// <summary>

/// 創建對象或從緩存獲取

/// </summary>

public static object CreateObject(string path, string CacheKey)

{

object objType = DataCache.GetCache(CacheKey);//從緩存讀取

if (objType == null)

{

try

{

//Assembly ass = new Assembly();

objType = Assembly.Load(path).CreateInstance(CacheKey);//反射創建

DataCache.SetCache(CacheKey, objType);// 寫入緩存

}

catch(System.Exception ex)

{

string str = ex.Message;//

SmsSystem.Utility.SaveLog.SaveInfoToLog(str, "errorLog", "異常");

}

}

return objType;

}

/// <summary>

/// 不使用緩存,創建對象

/// </summary>

private static object CreateObjectNoCache(string path, string CacheKey)

{

try

{

object objType = Assembly.Load(path).CreateInstance(CacheKey);

return objType;

}

catch//(System.Exception ex)

{

//string str=ex.Message;// 記錄錯誤日志

return null;

}

}

/// <summary>

/// 創建CustEmployee數據層接口

/// </summary>

public static SmsSystem.IDAL.ICustEmployee CreateCustEmployee()

{

string CacheKey = path + ".CustEmployee";

object objType = CreateObject(path, CacheKey);

return (ICustEmployee)objType;

}

………………(其它數據層接口)

}

由這一個類,就可以獲取需要用的數據訪問層的實例,可是,我在使用過程中卻總是抛出異常,[System.IO.FileNotFoundException] = {"未能加載文件或程序集“SmsSystem.SQLServerDAL”或它的某一個依賴項。系統找不到指定的文件。":"SmsSystem.SQLServerDAL"} ,說實話,對于C#這排錯和調試我還手生,我百思不得其解,爲什麽會一用反射就異常呢,整個上去我去看反射的IPA,感覺我的用法沒錯誤啊,況且,我看PetShop的例子就是這樣差不多的寫法,它爲什麽能用,下午調試了好久還是在出錯,我發狠心去和petShop去對比,後來終于發現,它的dll的名字有些怪,和我的不同,它的都是如PetShop.SQLServerDAL.dll這樣的名字,而我的就是個SQLServerDAL.dll,我感覺極有可能是這裏有問題,因爲在wb.config裏我配置過

<appSettings>

<add key="DAL" value="SmsSystem.SQLServerDAL"/>

…………

</appSettings>

這樣一個程序集,搞了好久,請教別人,結果弄清楚,是要項目的屬性裏設置程序集的名稱,就可以生成SmsSystem.SQLServerDAL.dll這樣的dll文件

王朝网络

設置,重新生成 ,又出了一點問題,

類型“SmsSystem.BLL.CustEmployee”同時存在于“c:\Windows\Microsoft.net\Framework\v2.0.50727\Temporary ASP.NET Files

\smssystem\3358d7f2\16ba9bb7\assembly\dl3\7296d5df\40ded961_96d8c601\BLL.DLL”

和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\smssystem\3358d7f2

\16ba9bb7\assembly\dl3\644d894c\4cf8840a_9ad8c601\SmsSystem.BLL.DLL”

中 G:\ASP.NET\SmsSystem\Default.aspx.cs 22

我仔細一看,原來在web項目的bin下面,原來的SQLServerDAL.dll還在,又多了個SmsSystem.SQLServerDAL.dll,哈哈,vs2005又一個沒有自動刪除掉的多余文件,昨天是一個項目文件AssemblyInfo.cs刪除掉後,在相應的刪除文件竟然沒刪除,不過,我把它手工刪除掉,OK,一切正常,還是感謝告訴我怎麽樣改項目的Assembly name的朋友,不然我竟然找好久也不曉得怎麽生成帶上命名空間的dll。

使用夏新M630也許會遇到的小問題
 用M630三個多月了,從中也發現一些自己解決問題的辦法,拿兩個與大家分享。  問題一:進入資源管理器顯示“操作失敗”,出現這個問題可能跟內存被格式化有關。解決辦法:*7638#工程模式——硬件測試——NAND相關...查看完整版>>使用夏新M630也許會遇到的小問題
 
Map接口的使用。。。今天遇到的問題。。
/** * 從請求中取出所有參數列表, * 然後和工作項id一起保存到數據庫中 * @param req HttpServletRequest */ protected void doSaveParameters(HttpServletRequest req){ Map pMap = req.getParam...查看完整版>>Map接口的使用。。。今天遇到的問題。。
 
我在使用C#中Treeview與解析XML遇到的問題!
近日我在用C#將PDM中相關內容導入到TreeView的過程中,遇到一個很奇怪的問題,請各位大蝦指點,謝謝!private void ReadXml(string strFileName) { try { XmlDocument xmlDoc = new XmlDocument(); ...查看完整版>>我在使用C#中Treeview與解析XML遇到的問題!
 
使用反射機制確定基本數據類型屬性
Java反射機制提供了一種強大的應用程序接口來幫助我們在運行時檢測和執行對象上的操作。該機制答應程序員審閱一個未知對象,並且獲得它的屬性,例如對象上的方法,JavaBean的屬性以及繼續關系等。Java中有兩種類型的...查看完整版>>使用反射機制確定基本數據類型屬性
 
C#中使用反射顯示程序集的所有類型和屬性
/// <summary> /// /// loads a *.dll file from txtMethods and invokes all methods int it. /// lists all types in the assembly /// /// </summary> /// <param name="sender&quo...查看完整版>>C#中使用反射顯示程序集的所有類型和屬性
 
MSSQL2000的官方JDBC在應用動態代理機制遇到的異常問題解決
MSSQL2000的官方JDBC在應用動態代理機制遇到的異常問題解決 最近,翻出以前做的connection pool,結果在調用SQL Server 2000的官方JDBC遇到了錯誤。connection pool的原理基本參照這個來實現的。 下面的代碼...查看完整版>>MSSQL2000的官方JDBC在應用動態代理機制遇到的異常問題解決
 
候捷談Java反射機制
Java反射機制 摘要Reflection 是Java被視爲動態(或准動態)語言的一個要害性質。這個機制答應程序在運行時透過Reflection APIs取得任何一個已知名稱的class的內部信息,包括其modifiers(諸如public, static 等等)...查看完整版>>候捷談Java反射機制
 
javascript的“反射”機制
這裏用“反射”這個詞僅是一種概念上的借用,且不論下面提到的javascript的特性是否可以被稱爲“反射”,javascript這種獲得對象類型(通過typeof運算)、構造函數(通過觀察constructor屬性)甚至枚舉屬性和方法的特...查看完整版>>javascript的“反射”機制
 
AJAX的javascript的反射機制
  什麽是反射機制  反射機制指的是程序在運行時能夠獲取自身的信息。例如一個對象能夠在運行時知道自己有哪些方法和屬性。  在JavaScript中利用for(…in…)語句實現反射  在JavaScript中有一個很方便的語法來...查看完整版>>AJAX的javascript的反射機制
 
 
回到王朝網路移動版首頁