天天看點

建構插件式的應用程式架構(五)-管理插件

我們現在已經搭建了插件式的應用程式架構,接下來的工作就是要充實架構的内容,提供基本的服務,也就是Service。我想首要的任務就是提供插件的管理服務,我在前面的文章也提到了,要實作動态加載必須要知道插件寄宿在哪裡,哪些要加載,哪些不加載,這些就是這篇文章要讨論的問題。

首先解決的就是插件放在什麼地方,我采取的傳統的方法,将插件放到應用程式所在目錄下的制定目錄,我會在應用程式所在的目錄下建立一個檔案夾,命名為Plugins。接下來的工作就是要通知哪些插件是要加載的,哪些是不需要加載的,我會将這些資訊放到應用程式的配置檔案中的制定配置塊中,當應用程式運作的時候,就會讀取配置檔案,并根據獲得的資訊加載插件。另外我們的應用程式架構是建立在Service基礎之上,是以我需要建立一個管理插件的service。

我們現在定義一個插件管理的Service接口。

複制  儲存

PluginService要實作的目标首先是在配置檔案中添加/删除要加載的插件以及相關的資訊,接下來就是動态的加載插件。我們要定義幾個類型:Plugin配置區塊類型,Plugin元素類型,plugin元素集合類型,以便我們能夠讀取插件的資訊。

最後我們實作PluginService:

由于代碼比較多,我也就不一一列舉了,隻把比較重要的代碼列出來,其餘的我會提供源代碼的下載下傳。在實作了PluginService以後,我們需要有一個地方能夠使用這個Service來管理插件,我的做法是在一個菜單裡添加一個項目,當使用者點選這個項目的時候彈出插件管理的對話框,使用者在這個對話框中選擇使用那些插件,當插件被選中的時候,插件會被立即加載進來,并且記錄到配置檔案裡,當使用者下次運作應用程式的時候,插件預設會被自動的加載。

另外從現在開始我們就需要使用配置檔案了,是以,我們需要給應用程式添加一個app.config檔案,檔案内容如下:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<configSections>

<section

name="PluginSection"

type="PluginFramework.PluginConfigurationSection, PluginFramework"

/>

</configSections>

<PluginSection>

</PluginSection>

</configuration>

樣子,總體來說我們就為Plugin的管理提供了一個基本的實作,如果大家還有什麼不明白的地方,可以參考我提供的源代碼或者通過e-mail和我聯系。

源代碼下載下傳

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