日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

一个.NET Core下的开源插件框架Pluginfactory

發(fā)布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个.NET Core下的开源插件框架Pluginfactory 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

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

一、PluginFactory插件庫

  • 項目地址:

  • Gitee:https://gitee.com/WuYeCai/pluginfactory

  • Github:https://github.com/xfrogcn/Xfrogcn.PluginFactory

  • 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接口,負(fù)責(zé)從指定位置加載插件程序集

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

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

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

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

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

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

1)安裝

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

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

2)在主程序中啟用

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

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

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

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

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

????注意:?AddPluginFactory方法不會使用默認(rèn)的配置文件作為插件配置,你需要顯式地傳入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ù)IPluginInitContextServiceCollection可以控制宿主注入容器。

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注入插件程序集:

總結(jié)

以上是生活随笔為你收集整理的一个.NET Core下的开源插件框架Pluginfactory的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。