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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MEF 插件式开发 - DotNetCore 初体验

發布時間:2023/12/4 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MEF 插件式开发 - DotNetCore 初体验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景敘述

在傳統的基于?.Net Framework?框架下進行的 MEF 開發,大多是使用?MEF 1,對應的命名空間是?System.ComponentModel.Composition。在?DotNet Core?中,微軟為了偉大的跨平臺策略,引入了?MEF 2,其對應的命名空間是?System.Composition,這個需要開發者自己在 Nuget 上進行下載安裝?Microsoft.Composition。2 與 1 相比,無論是在支持平臺上還是性能上都有改進,值得我們探討一下。

動手實驗

實驗1:在 DotNetCore 控制臺程序中嘗試使用 MEF2

首先,我們創建一個 DotNet Core 控制臺應用程序,然后為其添加 MEF2 對應的 Package:Microsoft.Composition;

然后,我們創建一個示例接口:

public interface IMessageSender{ ? ?
? ? void Send(string message); }

接著,我們再創建一個示例類來實現該接口,并嘗試將其導出:

[Export(typeof(IMessageSender))]
public class EmailSender : IMessageSender{ ?
? ?public void Send(string message) ? ?{Console.WriteLine(message);} }

最后,我們在主程序中進行調用:

此時,如果一切正常的話,程序會輸入如下結果:

?

實驗2:在 DotNetCore 控制臺程序中嘗試使用 MEF2 加載外部組件

由于微軟在?DotNetCore?中為開發者提供了新的程序集加載方式?AssemblyLoadContext。它允許多次加載相同的程序集,并創建相互獨立的副本,并且它比?AppDomain?重量輕得多。因此我在本次實驗中,筆者嘗試使用這種新的加載方式進行實驗。

首先,我們創建一個如下圖所示的解決方案:

?
  • DotNetCoreMEF:控制臺程序,安裝?Microsoft.Composition,并引用?DotNetCoreMEF.Core;

  • DotNetCoreMEF.Core:核心類庫,用于定義相關接口;

  • DotNetCoreMEF.Plugin1:插件類庫,安裝?Microsoft.Composition,并引用?DotNetCoreMEF.Core;

  • DotNetCoreMEF.Plugin2:插件類庫,安裝?Microsoft.Composition,并引用?DotNetCoreMEF.Core;

注意:請確保上述項目的生成目錄保持一致。

相關示例代碼如下所示:

IMessageSender.cs

public interface IMessageSender{ ?
? ?void Send(string message); }

此時,我們將項目全部重新編譯一下,可通過 VS 調試運行,看到相應的輸出結果。當然,我們也可以通過命令行的方式運行程序,前提是我們需要將我們的程序發布一下。發布好后我們可以執行?dotnet DotNetCoreMEF.dll?看到輸出結果:

?

總結

上述展示的只是 MEF 在?DotNet Core?中的簡單應用,其中需要注意的是?AssemblyLoadContext?,此外,關于模塊的?延遲記載?和?元數據的獲取?,感興趣的朋友可參考我之前的一篇博客進行參考:MEF 插件式開發 - WPF 初體驗。

其實,如果對?DotNet Core?有一定了解的朋友是知道的,上述這種方式雖然實現了插件式的開發模式,但是并沒有完全發揮?DotNet Core?本身所具有優勢:內置 DI。所以,我們完全可以使用更高效的方式來實現。在下篇博客中,我們將感受一下 DotNet Core 中強大的 DI 。

相關參考

  • Managed Extensibility Framework (MEF)

  • BCL Team Blog

  • Using MEF in .NET Core

  • Using MEF in .NET Core

  • best-practices-for-assembly-loading

  • 【.NET 深呼吸】在 .net core app 中使用 Composition

  • .NET Core application deployment

原文地址:https://www.cnblogs.com/hippieZhou/p/9451950.html


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com?

總結

以上是生活随笔為你收集整理的MEF 插件式开发 - DotNetCore 初体验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。