最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一個.Net Core的開源框架

2020-11-13 09:31 作者:微軟MVP-Eleven  | 我要投稿

插件模式歷史悠久,各種中大型軟件基本上都會實現(xiàn)插件機制,以此支持功能擴展,從開發(fā)部署層面,插件機制也可實現(xiàn)功能解耦,對于并行開發(fā)、項目部署、功能定制等都有比較大的優(yōu)勢。

? ?在.NET Core下,一般我們基于.NET Core擴展庫進行開發(fā),通常使用依賴注入、配置、設(shè)置(Options)等機制,如果將插件模式與依賴注入、配置、設(shè)置進行結(jié)合,將可以提供非常靈活的擴展機制?;诖?,我們實現(xiàn)了一個開源的插件框架,本文將進行簡單的介紹。

一、PluginFactory插件庫

  • 項目地址:

  • Gitee

  • Github

  • Nuget包:

  • Xfrogcn.PluginFactory 實現(xiàn)包,在主項目中引用

  • Xfrogcn.PluginFactory.Abstractions 抽象包,在插件項目中引用,或者你可以完全重新實現(xiàn)自己的插件機制

  • 主要功能:

  • 插件的自動載入

  • 通過插件的初始化接口可讓插件控制主應(yīng)用的依賴注入

  • 插件的啟動及停止,此機制可與.NET Core的Hosting擴展結(jié)合,在宿主啟動時自動啟動插件

  • 抽象分離,你可以通過實現(xiàn)Xfrogcn.PluginFactory.Abstractions中的相關(guān)接口來完全實現(xiàn)自己的插件載入、啟動等機制

  • 與.NET Core配置、設(shè)置、宿主等完美融合

  • 支持插件依賴程序集的多版本載入

二、主要概念

  • 插件載入器:對應(yīng)IPluginLoader接口,負責(zé)從指定位置加載插件程序集

  • 插件工廠:對應(yīng)IPluginFactory接口,負責(zé)插件的實例化及插件的啟動和停止

  • 插件:對應(yīng)IPlugin接口,所有插件需要實現(xiàn)此接口,實現(xiàn)插件的啟動及停止機制

  • 可初始化插件:對應(yīng)ISupportInitPlugin接口,通過此接口可以在依賴注入Provider構(gòu)建之前向容器注入自定義的服務(wù)

  • 可配置插件:對應(yīng)ISupportConfigPlugin接口,通過此接口可將插件配置與.NET Core的配置(Configuration)及設(shè)置(Options)機制集合

三、使用向?qū)?/p>

? ?示例項目可參考:Xfrogcn.PluginFactory.Example Gitee地址 Github地址

1)安裝

? ?在主程序項目中添加Xfrogcn.PluginFactory包


? ?在插件項目中添加Xfrogcn.PluginFactory.Abstractions包


2)在主程序中啟用

? ?可通過以下兩種方式來啟用插件庫,一是通過在Host層級的Use機制以及在依賴注入IServiceCollection層級的Add機制,以下分別說明:

1. 通過IHostBuilder的UsePluginFactory方法啟用插件庫


UsePluginFactory具有多個重載版本,詳細請查看API文檔 默認配置下,將使用程序運行目錄下的Plugins目錄作為插件程序集目錄, 使用宿主配置文件作為插件配置文件(通常為appsettings.json) 你也可以通過使用帶有 Assembly 或 IEnumerable 參數(shù)的版本直接傳入插件所在的程序集

2. 通過IServiceCollection的AddPluginFactory方法啟用插件庫

AddPluginFactory具有多個重載版本,詳細請查看API文檔 默認配置下,將使用程序運行目錄下的Plugins目錄作為插件程序集目錄

注意: AddPluginFactory方法不會使用默認的配置文件作為插件配置,你需要顯式地傳入IConfiguration, 如果是在 ASP.NET Core 環(huán)境中,你可以在Startup類中直接獲取到

3)編寫插件

插件是實現(xiàn)了IPlugin接口的類,在插件庫中也提供了PluginBase基類,一般從此類繼承即可。標(biāo)準(zhǔn)插件具有啟動和停止方法,通過IPluginFactory進行控制。

要編寫插件,一般遵循以下步驟:

創(chuàng)建插件項目(.NET Core 類庫),如TestPluginA

添加Xfrogcn.PluginFactory.Abstractions包

創(chuàng)建插件類,如Plugin,從PluginBase繼承

啟動或停止方法中可通過context中的ServiceProvider獲取注入服務(wù)

通過PluginAttribute特性設(shè)置插件的元數(shù)據(jù)


插件元數(shù)據(jù)以及插件載入的插件列表信息可以通過IPluginLoader.PluginList獲取

4)插件啟動

IPluginFactory本身實現(xiàn)了.NET Core擴展庫的IHostedService機制,故如果你是在宿主環(huán)境下使用,如(ASP.NET Core),插件的啟動及停止將自動跟隨宿主進行,如果未使用宿主,可通過獲取IPluginFactory實例調(diào)用相應(yīng)方法來完成.


5)編寫支持初始化的插件

在很多場景,我們需要在插件中控制宿主的依賴注入,如注入新的服務(wù)等,這時候我們可通過實現(xiàn)支持初始化的插件(ISupportInitPlugin)來實現(xiàn),該接口的Init方法將在依賴注入構(gòu)建之前調(diào)用,通過方法參數(shù)IPluginInitContext中ServiceCollection可以控制宿主注入容器。

6)使用插件配置

插件支持 .NET Core 擴展庫中的Options及Configuration機制,你只需要從SupportConfigPluginBase類繼承實現(xiàn)插件即可,其中TOptions泛型為插件的配置類型。插件配置自動從宿主配置或啟用插件工廠時傳入的配置中獲取,插件配置位于配置下的Plugins節(jié)點,該節(jié)點下以插件類名稱或插件別名(通過PluginAttribute特性指定)作為鍵名,此鍵之下為插件的配置,如以下配置文件:

擴展PluginA實現(xiàn)配置:

定義配置類,如PluginOptions

實現(xiàn)插件

注意:在插件初始化方法中也可使用注入的配置

跨插件配置

有些配置可能需要在多個插件中共享,此時你可通過Plugins下的_Share節(jié)點進行配置,此節(jié)點下配置將會被合并到插件配置中,可通過PluginOptions進行訪問。

7)插件化 ASP.NET Core

? ?要讓 ASP.NET Core 獲取得到插件中的控制器,你只需要在插件的初始化方法Init中,向MVC注入插件程序集:


一個.Net Core的開源框架的評論 (共 條)

分享到微博請遵守國家法律
兴和县| 红河县| 临海市| 宾川县| 康乐县| 进贤县| 垫江县| 喀喇| 闽侯县| 澳门| 天水市| 合江县| 涞源县| 金沙县| 临沧市| 屯昌县| 榆社县| 禄丰县| 浮山县| 瑞金市| 邵武市| 兴文县| 福州市| 天全县| 兰州市| 乌拉特前旗| 剑川县| 盐边县| 新兴县| 诏安县| 眉山市| 汝南县| 通道| 苍溪县| 青河县| 西充县| 南溪县| 连平县| 博客| 佛山市| 邵阳县|