天天看點

建構插件式的應用程式架構(八)-視圖服務的簡單實作

我在前一篇文章裡提到,對于停靠工具欄或者是視圖最好是不要将執行個體放到詞典中,而是将工具欄或者視圖的類型放到詞典中,因為視圖類型會經常的被重用,并且會經常被關閉或者再打開。當執行個體被關閉後,資源就被釋放了,對于執行個體的管理就會比較麻煩,是以我們分為兩步走。在插件被加載的時候,我們隻注冊類型,在應用程式運作的時候,我們通過某種途徑來執行個體化他。

我修改的以前的例子,主要突出本次示範的功能。這次的例子實作的功能是通過插件擴充應用程式處理不同檔案的能力。在原始的應用程式中,我們可以通過File菜單的Open,隻能打開一種檔案,就是文本檔案,大家可以在例子中看到,當我們沒有加載插件的情況下,在OpenFileDialog的Filter中隻有"Text(*.txt)"。選擇一個文本檔案以後,将會出現文本檔案視圖。當我們加載插件以後,在點選File->Open菜單,我們觀察Filter,發現會多出兩種檔案:"JPEG"和"BMP",這是我們就可以打開圖檔檔案,選中檔案以後,将會出現Picture視圖,并且在主菜單下邊,還會出現一個工具欄,點選工具欄上的按鈕,可以給圖檔加上水印,并且工具欄會根據PictureView的狀态(Active)顯示和消失。比如你打開了一個文本視圖和一個圖檔視圖,當你切換到文本視圖的時候,工具欄就會消失,再切換到圖檔視圖的時候,工具欄又會出現。

我在架構裡面添加了一個IDocumentViewService的接口,用以描述服務的功能:

複制  儲存

下面是這個服務的實作:

時間比較緊,寫的比較粗糙。另外定義了DocumentView的基本功能,就是需要打開的檔案的路徑,以及顯示的方法。再插件了,我實作的一個PictureView,為兩種檔案注冊了這個視圖類型,大家可以根據自己的需要繼續擴充。轉眼又十一點多了,明天還要上班,就寫到這裡了,又說的不清楚的地方,大家可以參考一下源代碼。

源代碼

<a href="http://files.cnblogs.com/guanjinke/pluginsample8.rar">http://files.cnblogs.com/guanjinke/pluginsample8.rar</a>

繼續閱讀