基於AppDomain的外掛程式開發 自動載入(三)

2021-09-06 06:26:10 字數 1574 閱讀 6714

前面已經得到了熱插拔的外掛程式原型,這次討論如果外掛程式是服務提供者怎麼辦?

我能想到的,

需要在起動時載入所有外掛程式

然後在外掛程式變動時,及時解除安裝舊的外掛程式,載入新的外掛程式。

如果有新外掛程式放在目錄中,需要馬上載入新的外掛程式。

如果外掛程式被刪除,我們要把對應的服務也移除。

最終使用時,如下:

privatevoidformmain_load(objectsender, eventargse)

voidonpluginchanged(objectsender, pluginmanagereventargse)

} 一、 監視目錄,第一想到的便是 filesystemwatcher ,我們就用它來實現監視乙個目錄。 如果有經驗的,會知道這個類的changed

事件,在檔案變化時,因為檔案屬性多次變化,也會激發多次。我這裡的解決方案是:

把收到的變動放置在容器中,任你變化,再你不再變化時,我統一處理一次。其中,重新命名,理解為刪除原來的,增加新檔案。

///

///監視外掛程式目錄

///輸出外掛程式

dll的變更,修改,刪除,增加

///publicclasspluginmanager

} }

privatepluginmanager()

); this.timerprocess.change(10, -1);

}

voidonpluginrenamed(objectsender, renamedeventargse)

voidonpluginchanged(objectsender, filesystemeventargse)

protectedvoidprocesschangedplugin()

#endregion

}internalclassplugincallerproxy: iplugin

set

} internalipluginplugin

return_plugin;

} finally

} set

finally

} }

publicplugincallerproxy(pluginloaderloader)

publicguidpluginid

}

publicstringrun(stringargs)

publicstringrun(stringargs, actionaction)

publicstringrun(stringargs, func func)

} publicclasspluginmanager

break;

casewatcherchangetypes.deleted:

} break;

casewatcherchangetypes.changed:

} break;

} }

} #endregion

}

}

基於AppDomain的 外掛程式式 開發

看了空逸雲的 基於的 外掛程式式 開發 後,在其基礎上,做優化修改。1.使用 在程式集找不到時,去 plugins 目錄中再次載入。這樣就可以直接載入外掛程式類名,方便多了。2.外掛程式的方法有限,直接寫上方法 去除了動態生成方法呼叫的效能損失。同時,系統還保證了外掛程式的 1.熱插拔 實現2.版本...

AppDomain與Assembly的載入與解除安裝

為了將問題描述清楚,我們先來看乙個例子。在這個例子中,winform上有乙個按鈕,當使用者點選這個按鈕後,就會裝載乙個已經存在的assembly,並且在介面的label控制項上顯示出這個assembly的fullname。對reflection稍微熟悉一點的朋友都知道,這是非常簡單的事情,只需要用a...

基於Fragment的外掛程式化

摘自android外掛程式化開發指南 2.activity切換fragment頁面 第一步 fragmentloaderactivity作為fragment的承載容器 activity android name fragmentloaderactivity intent filter action ...