一、前言
插件模型指應用程序由一些動態的獨立模塊構成,每個模塊均具有一個或多個服務,並滿足一定的插件協議,能夠借助主程序實現主程序-插件,插件-插件之間的通訊。它定義了一套公共的接口,通過接口與插件進行通信,主要是通過反射來獲取相關的屬性和方法,然後再執行指定的操作。其實,它也可以理解為定義一套通用的解決方案,通過反射來獲取相應的程序集的相關類型,然後執行這些指定類型的相關操作。它是一種即插即用的方案,更新及維護簡便。
本文僅僅是描述插件開發的大體模型,設計比較簡單,主要的步驟如下:
(1)、定義公共的接口以及抽象類。
(2)、定義和實現相關組件。
(3)、實現通用程序集反射操作類。
其中,公共的接口和抽象類定義在組件Jasen.Framework.Core中,該組件中提供通用程序集反射操作類AssemblyUtility;具體實現的相關組件為Jasen.Framework.Oracle、Jasen.Framework.Access和Jasen.Framework.SqlServer,它們都實現了Jasen.Framework.Core中的公共接口。客戶端可以根據實際情況來進行相應的操作。相關組件圖如下:
二、公共接口和抽象類的定義以及相關組件的定義和實現
首先,定義公共的接口以及抽象類,如下類圖所示,定義一個公共的接口IDataTable,定義一個抽象類DataTable,這些公共的類型放置在最頂端的程序集中。而其他組件將分別重新創建,實現相對應的功能,如SqlServerDataTable、OracleDataTable和AccessDataTable實現各自的功能。注意:Assembly.LoadFile(file)動態加載程序集時,該程序集在當前的運行環境中必須不存在的,否則可能會出現意想不到的數據異常,因此相關組件的實現必須是獨立的(僅僅是實現公共的接口)。