在.NET Core中使用MEF
題記:微軟的可托管擴(kuò)展框架也移植到.NET Core上了。
可托管擴(kuò)展框架(Managed Extensibility Framework,MEF)是微軟為大型應(yīng)用程序(比如Visual Studio這樣的東西)提供的一個(gè)功能擴(kuò)展框架,通過(guò)一個(gè)混合層提升了靈活性、維護(hù)性和可測(cè)試性。MEF既可以用于第三方插件支持?jǐn)U展功能(我曾經(jīng)開(kāi)發(fā)的eBalance就是使用MEF實(shí)現(xiàn)插件功能),也能為常見(jiàn)的應(yīng)用程序帶來(lái)松耦合插件架構(gòu)的好處。MEF最早是作為一個(gè)開(kāi)源的擴(kuò)展庫(kù)發(fā)布,后來(lái)直接融合到.NET Framework中一起發(fā)布,所謂的命名空間(System.*.Composition)就是它了。
當(dāng)然,由于歷史原因,MEF現(xiàn)存兩個(gè)版本:
一個(gè)是同.NET 4.0和Silverlight 4及其更高版本內(nèi)置的,命名空間為System.ComponentModel.Composition。這個(gè)版本提供了標(biāo)準(zhǔn)的擴(kuò)展模型,也是VS使用的。
另外一個(gè)是通過(guò)Nuget發(fā)布的輕量級(jí)的支持可移植的版本,針對(duì)靜態(tài)混合進(jìn)行了優(yōu)化,提供了更快的混合過(guò)程,你可以認(rèn)為這是MEF2,命名空間是System.Compostion,可以被用于手機(jī)、商店應(yīng)用、桌面和Web應(yīng)用之中。
而現(xiàn)在移植到.NET Core的版本只是MEF2(這是理所當(dāng)然的),沒(méi)有Catalog可用,源代碼在此:https://github.com/dotnet/corefx/tree/master/src。
要使用MEF也很簡(jiǎn)單,直接通過(guò)Nuget添加就行:http://www.nuget.org/packages/Microsoft.Composition/
如果只是想自動(dòng)加載Assembly的話(huà),.NET Core雖然沒(méi)有再提供AppDomain還是提供了類(lèi)似概念的東西,即AssemblyLoadContext。不過(guò)動(dòng)態(tài)加載程序集在.NET Native下可能會(huì)有問(wèn)題,因?yàn)椴](méi)有JIT的存在。
如何在.NET Core中使用MEF的具體代碼,可以參考Ricardo Peres的博文:http://weblogs.asp.net/ricardoperes/using-mef-in-net-core
內(nèi)容轉(zhuǎn)載自公眾號(hào)
dotNET每日精華文章 了解更多總結(jié)
以上是生活随笔為你收集整理的在.NET Core中使用MEF的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 编程语言的发展趋势及未来方向(4):动态
- 下一篇: ASP.NET Core 性能对比评测(