在.NET Core中使用MEF


(此文章同時發表在本人微信公眾號“dotNET每日精華文章”,歡迎右邊二維碼來關注。)

題記:微軟的可托管擴展框架也移植到.NET Core上了。

可托管擴展框架(Managed Extensibility Framework,MEF)是微軟為大型應用程序(比如Visual Studio這樣的東西)提供的一個功能擴展框架,通過一個混合層提升了靈活性、維護性和可測試性。MEF既可以用於第三方插件支持擴展功能(我曾經開發的eBalance就是使用MEF實現插件功能),也能為常見的應用程序帶來松耦合插件架構的好處。MEF最早是作為一個開源的擴展庫發布,后來直接融合到.NET Framework中一起發布,所謂的命名空間(System.*.Composition)就是它了。

當然,由於歷史原因,MEF現存兩個版本:

  1. 一個是同.NET 4.0和Silverlight 4及其更高版本內置的,命名空間為System.ComponentModel.Composition。這個版本提供了標准的擴展模型,也是VS使用的。
  2. 另外一個是通過Nuget發布的輕量級的支持可移植的版本,針對靜態混合進行了優化,提供了更快的混合過程,你可以認為這是MEF2,命名空間是System.Compostion,可以被用於手機、商店應用、桌面和Web應用之中。

而現在移植到.NET Core的版本只是MEF2(這是理所當然的),沒有Catalog可用,源代碼在此:https://github.com/dotnet/corefx/tree/master/src

要使用MEF也很簡單,直接通過Nuget添加就行:http://www.nuget.org/packages/Microsoft.Composition/

如果只是想自動加載Assembly的話,.NET Core雖然沒有再提供AppDomain還是提供了類似概念的東西,即AssemblyLoadContext。不過動態加載程序集在.NET Native下可能會有問題,因為並沒有JIT的存在。

如何在.NET Core中使用MEF的具體代碼,可以參考Ricardo Peres的博文:http://weblogs.asp.net/ricardoperes/using-mef-in-net-core


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM