我們知道,要基於平台(容器)+外掛程式的這種模式進行開發,我們必須定義一組契約,用於約束模組外掛程式開發,也就是說,模組外掛程式需要遵守一定的標準進行開發,才能正常被容器調用,這就是IModule所定義的內容。
IModule/// <summary>/// 定義EAS模組外掛程式的基本規範。/// </summary>public interface IModule: IObject{ /// <summary> /// 擷取模組的名稱。 /// </summary> string ModuleName { get; } /// <summary> /// 擷取模組的說明資訊。 /// </summary> string ModuleDescription { get; } /// <summary> /// 擷取模組的分組資訊。 /// </summary> string Group { get; } /// <summary> /// 當功能模組成功啟動後觸發。 /// </summary> event System.EventHandler Started; /// <summary> /// 在關閉模組之前觸發該事件。 /// </summary> event System.EventHandler Exited; /// <summary> /// 關閉當前模組,該方法是用於關閉運行在Shell中的程式模組。 /// </summary> void Close(); /// <summary> /// 運行當前模組,該方法是是用於由運行時Shell 載入模組,實現模組調用。 /// </summary> /// <param name="parameters">模組啟動並執行初始參數列表。</param> void Run(params object[] parameters);}
IModule定義了模組名稱及模組被調用的方法Run(),以及被平台載入和關閉的事件,從定義可我們看到IModule繼續自IObject介面。
IObject/// <summary>/// 定義系統對象的基本規範。/// </summary>public interface IObject : IPrivilegObject, System.IDisposable{ /// <summary> /// 擷取對象的說明資訊。 /// </summary> string Description { get;} /// <summary> /// 擷取對象的表徵圖。 /// </summary> System.Drawing.Image Icon { get;}}
這裡為什麼會出現IObject介面,這裡提到一個說明,就在是EAS.NET平台設計之初,我們引入了一個想法,我們視程式中的模組、ORM對象、所定義的外部裝置等統稱為對象,並對這些對象進行管理,基於這於一個想法,我們引入了一個對象的概念,但是在實際應用中,對象這一層次的理解慢慢談化,也許在將來的設計中,取消這個介面。
IObject介面顯式的定義了對象的說明性資訊對象描述和表徵圖,對於IModule介面及IObject介面,都繼承自一個重要的介面IPrivilegObject。
IPrivilegObject/// <summary>/// 系統權限物件的基本規範。/// </summary>public interface IPrivilegObject{ /// <summary> /// 擷取權限物件的通用唯一識別碼(GUID)。 /// </summary> System.Guid Guid { get; } /// <summary> /// 擷取權限物件的類型資訊,即對象的類名稱。 /// </summary> string Type { get; } /// <summary> /// 擷取對象權限物件名稱。 /// </summary> string Name { get;} /// <summary> /// 擷取對象的版本資訊。 /// </summary> string Version { get;} /// <summary> /// 擷取對象的程式集資訊。 /// </summary> string Assembly { get;} /// <summary> /// 擷取對象的開發人員資訊。 /// </summary> string Developer { get;}}
IPrivilegObject為權限物件接品,平台(運行容器)可以使用其鑒權系統對其實現許可權檢查,關於系統的許可權設計我會在後面專門進行說明。
在模組外掛程式的介面中,我們看到了很多關於模組自描述的資訊,比如名稱、說明、類型、程式集、版本號碼以及開發人員等等,定義這些資訊的目的在於對模組的自描述,資源管理平台在安裝模組的過程中讀取這些中繼資料並儲存在資料庫,以方便對系統中外掛程式的管理。
模組中繼資料中定義的程式集、類型資訊用於容器反射調用外掛程式,這也是平台+外掛程式所依賴的關鍵技術。
在具體的應用開發中,針對WinFrom和WebForm的不同應用對IModule介面進行了某些擴充和基礎實現,用於在應用開發過程的特定應用,以加快開發速度。
在下一篇文章中,我將會對調用模組外掛程式的平台,也就是運行容器做介紹。
連結:AgileEAS.NET應用開發平台介紹