2011-09-07 74 views
-1

我有一個程序可以做很多事情,其中​​一個連接到Oracle數據庫,使用Oracle.DataAccess.Client;現在它不需要加載這個名稱空間。我不能包含它們,因爲它來自Oracle數據庫包。我需要一些嘗試,但在命名空間。現在沒有這個名稱空間,應用程序會拋出未處理的異常並崩潰。我想抓住這個例外並設置一些標誌,如noOracleClient=true;C#並嘗試命名空間

+0

不應該在編譯時失敗,而不是在運行時失敗?如果它無法編譯,只需刪除它? – David

+0

您需要解決您的語法問題,並更具體地試圖實現您的目標。向我們展示一個崩潰代碼的示例。 – havardhu

回答

0

我不認爲它會按照你的想法工作。這聽起來像你真正想要的是一個依賴注入框架,就像Ninject一樣。

0

我建議把你的Oracle訪問代碼放在一個單獨的程序集中。然後通過接口公開功能,並將代碼展示給該接口。

然後你可以使用像Joel C建議的Ninject或者MEF(http://stevenhollidge.blogspot.com/2011/04/how-to-use-mef-with-c.html)來加載你的組裝作爲具體的類。

0

嘗試加載組件使用全名「Oracle.DataAccess.Client」通過反射

using System.Reflection; 
string fullName = "fully qualified assembly name"; 
Assembly assembly = Assembly.LoadFrom(fullName); 

如果Oracle.DataAccess.Client在GAC這個代碼將被正確執行,否則 - 將引發異常。您應該指定完整的程序集名稱來加載特定版本的Oracle客戶端