.Net插件框架Managed Extensibility Framework簡介
Managed Extensibility Framework(MEF)是微軟的一個用來擴展.NET應(yīng)用程序的框架,它最初為了滿足Visual Studio里的編輯器的需求,比如說,延遲加載所有東西和細粒度協(xié)定。隨著托管代碼慢慢地取代基于COM的擴展模型,MEF框架也逐漸成型。
MEF是在Codeplex上開源的,并且現(xiàn)在已經(jīng)是.Net 4.0的一部分。我們可以用它非常容易的實現(xiàn)插件框架。一個簡單的示例如下(使用時需要添加System.ComponentModel.Composition.dll 的引用):
class Program
{
[Import]
ILogger logger;
void Compose()
{
var catalog = new AssemblyCatalog(this.GetType().Assembly);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
public static void Main(string[] args)
{
var p = new Program();
p.Compose();
p.logger.LogMessage("hello world");
}
}
interface ILogger
{
void LogMessage(string msg);
}
[Export(typeof(ILogger))]
class ConsoleLogger : ILogger
{
public void LogMessage(string msg)
{
Console.WriteLine(DateTime.Now + ": " + msg);
}
}這個例子比較簡單,并不能很好的體現(xiàn)MEF帶來的便利,MS官方的一個稍微復(fù)雜點的例子SimpleCalculator更合適一些。
不過,從這個例子中也可以看出MEF的基本工作方式:服務(wù)方通過ExportAttribute導(dǎo)出可提供的服務(wù),使用者通過ImportAttirbute導(dǎo)入所需要的服務(wù)。它們之間彼此隔離而獨立,服務(wù)對象的創(chuàng)建由MEF框架完成,并能提供單例、延遲加載等特性,而無須我們顯式編碼實現(xiàn)。
到此這篇關(guān)于.Net插件框架Managed Extensibility Framework的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET MVC3 SEO優(yōu)化:利用Routing特性提高站點權(quán)重
這篇文章主要介紹了ASP.NET MVC3 SEO優(yōu)化:利用Routing特性消除多個路徑指向同一個Action,從而提高站點權(quán)重,需要的朋友可以參考下。2016-06-06
asp.net利用NamingContainer屬性獲取GridView行號的方法
在最近的一個項目中,用到在GridView模板列中添加有DropDownList控件,并開啟其AutoPostback屬性。當(dāng)發(fā)生SelectedIndexChanged事件時,想同時獲取其所在的行號,從而獲取相應(yīng)的行信息。2013-07-07
asp.net post方法中參數(shù)取不出來的解決方法
調(diào)試client端調(diào)用web api的代碼,服務(wù)器端的post方法的參數(shù)死活取不出來,下面有個不錯的解決方法,希望對大家有所幫助2014-01-01
1個文件如何輕松搞定Asp.net core 3.1動態(tài)頁面轉(zhuǎn)靜態(tài)頁面
這篇文章主要給大家介紹了關(guān)于如何通過1個文件輕松搞定Asp.net core 3.1動態(tài)頁面轉(zhuǎn)靜態(tài)頁面的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Asp.net core 3.1具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
使用ASP.NET?Web?API構(gòu)建Restful?API
這篇文章介紹了使用ASP.NET?Web?API構(gòu)建Restful?API的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04

