C對象所處的上下文環(huán)境_第1頁
C對象所處的上下文環(huán)境_第2頁
C對象所處的上下文環(huán)境_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、C# 程序中 對象所處的上下文環(huán)境起因:近來,我在業(yè)余時間忙于開發(fā)一個 網(wǎng)站后臺自動生成軟件軟件的設(shè)計開發(fā)起因會有另外的文章進(jìn)行介紹;現(xiàn)在是 2011-1-15 4:40 (我已經(jīng)累計有 超過 13個夜晚都是奮戰(zhàn)到這個時候的為了這個軟件);軟件的架構(gòu)思路,參照公司的標(biāo)準(zhǔn)產(chǎn)品 SUF6.1 的架構(gòu)模式;最完美的是,該軟件支持 插件擴(kuò)展任何人相對軟件的擴(kuò)展,都不需要修改源代碼只需要標(biāo)注特性,那么程序就會加載你的 第三方 工具欄,右鍵菜單 等選項(xiàng);問題的起因就在 插件這一塊!我在軟件的主體部分通過接口BaseFile, IPageType 創(chuàng)建了一個 插件中的對象 EditPageType e.as

2、pxListPageType l.aspx右鍵單擊這個 對象節(jié)點(diǎn),“文件屬性”這個數(shù)據(jù)來自 主程序的實(shí)現(xiàn);“配置窗體”這個來自 插件 WebCreate.Forever.dll然后,我將程序序列化保存,然后再 反序列化結(jié)果,這個 節(jié)點(diǎn)的 “配置窗體” 不見了;這個對象是否可以使用這個 右鍵菜單項(xiàng) 有一個 判斷函數(shù)這段代碼是說,如果 WebObject(網(wǎng)站對象) 不為空,且 這個對象是 插件的 EditPageType 類,那么就表示這個對象可以 使用這個 右鍵菜單項(xiàng) ,返回 True(真);查錯:這個右鍵菜單去哪了?為什么不顯示這個菜單?后來查錯原因,代碼行是 我調(diào)試了一哈,但是 obj 明

3、顯就是 EditPageType 的數(shù)據(jù)結(jié)構(gòu),沒理由這個代碼返回在False??!于是我寫下這行代碼,進(jìn)行強(qiáng)行轉(zhuǎn)換!結(jié)果,我遇到了一個以前都沒有遇到的 異常:簡單的說,這異常的 意思是說 : ListPageType 對象 l.aspx 不是 ListPageType;這就好比說 人類 的對象 舒小龍 不是 人類 一樣;不過,這個異常也很清楚:他的意思也很明確 ,這個 ListPageType 和 ListPageType 是不一樣的;我最后仔細(xì)思考,明白了原因:這個對象的創(chuàng)建 是 在 主程序中創(chuàng)建的;而現(xiàn)在,我想在 插件 的方法中 轉(zhuǎn)換 主程序的 對象,這時就出錯了;比方說:每個人都有身份證;

4、舒小龍也有一個 身份證,我們可以說 舒小龍的身份證 是 身份證;但是有一天,舒小龍去了美國 ,這時 舒小龍的身份證 是 身份證 美國就不承認(rèn)這句話是對的了;舒小龍強(qiáng)行轉(zhuǎn)換,硬是要說這個身份證是身份證于是美國的工作人員就報了一個異常:這個 身份證 和 身份證 是不一樣的;問題的癥結(jié)在于 上下文環(huán)境 的不一樣:中國 和 美國;就像上面說的,創(chuàng)建對象是說 主程序的環(huán)境 Default 中創(chuàng)建,但是我想 在 LoadNeither 環(huán)境下使用他一樣!解決方案:我之前的 WebObject 類是 繼承 Iserializable 準(zhǔn)備進(jìn)行手動序列化的,但是后來 我覺得手動序列化很麻煩,包括子類都難以幸免

5、;所以,我又取消了 這計劃;如果,手動序列化 能不能 避免這個問題呢?我沒有嘗試這個,因?yàn)?;昨晚好不容易?手動序列化的 代碼 改成 系統(tǒng)的序列化,我再反一次,我豈不是有?。坏诙€想法:既然問題出在: Default 中創(chuàng)建,就不能在 LoadNeither 中使用;那么,能不能將 創(chuàng)建的過程 也轉(zhuǎn)移到 插件中,就是 LoadNeither 環(huán)境中?不可能,因?yàn)閯?chuàng)建的過程有很多界面在聯(lián)動工作,主程序是最需要數(shù)據(jù)的地方,數(shù)據(jù)的創(chuàng)建如果轉(zhuǎn)移到了 插件中,那么失去這個插件,主程序就會崩潰!且 以后另外的插件 在 主程序中找不到 公共部分,那么豈不是 其他的插件也要 重新編寫 創(chuàng)建數(shù)據(jù)的編碼?那么能不

6、能將 插件 的環(huán)境 弄得 和 主程序 一樣呢?那樣,主程序 和 插件 都能夠共享數(shù)據(jù),不會有 環(huán)境限制;是的,這才是最好的辦法,最簡單,最省力!且依然維護(hù)了軟件最初的架構(gòu)設(shè)計初衷!-話說回來,我的插件 是在 程序的 最開始就執(zhí)行加載的加載參數(shù)在 配置文件中!代碼簡化如下:也就是將 WebCreate.Forever.dll WebCreate.Action.dll 這兩個插件加載到程序中;但是,沒想到,系統(tǒng)加載這兩個插件程序集時,居然 將這兩個放到了 別的環(huán)境下;典型的歧視!如何讓系統(tǒng)加載這兩個程序集時,將其 劃歸到 默認(rèn)環(huán)境下呢?我突然想起了 彬哥(我們項(xiàng)目經(jīng)理)之前的一篇文章可能涉及如何加載程序集;原來 加載程序集的方法有這么多;我試了一下,結(jié)果 正確的做法 正是 第一種:Assembly.Load("WebCreate.Action"); Assembly.Load("WebCreate.Forever"); 不過 加載的是 程序集的 命名空間,而不是程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論