.Net插件框架Managed Extensibility Framework簡(jiǎn)介
Managed Extensibility Framework(MEF)是微軟的一個(gè)用來(lái)擴(kuò)展.NET應(yīng)用程序的框架,它最初為了滿足Visual Studio里的編輯器的需求,比如說(shuō),延遲加載所有東西和細(xì)粒度協(xié)定。隨著托管代碼慢慢地取代基于COM的擴(kuò)展模型,MEF框架也逐漸成型。
MEF是在Codeplex上開(kāi)源的,并且現(xiàn)在已經(jīng)是.Net 4.0的一部分。我們可以用它非常容易的實(shí)現(xiàn)插件框架。一個(gè)簡(jiǎn)單的示例如下(使用時(shí)需要添加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);
}
}這個(gè)例子比較簡(jiǎn)單,并不能很好的體現(xiàn)MEF帶來(lái)的便利,MS官方的一個(gè)稍微復(fù)雜點(diǎn)的例子SimpleCalculator更合適一些。
不過(guò),從這個(gè)例子中也可以看出MEF的基本工作方式:服務(wù)方通過(guò)ExportAttribute導(dǎo)出可提供的服務(wù),使用者通過(guò)ImportAttirbute導(dǎo)入所需要的服務(wù)。它們之間彼此隔離而獨(dú)立,服務(wù)對(duì)象的創(chuàng)建由MEF框架完成,并能提供單例、延遲加載等特性,而無(wú)須我們顯式編碼實(shí)現(xiàn)。
到此這篇關(guān)于.Net插件框架Managed Extensibility Framework的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET MVC3 SEO優(yōu)化:利用Routing特性提高站點(diǎn)權(quán)重
這篇文章主要介紹了ASP.NET MVC3 SEO優(yōu)化:利用Routing特性消除多個(gè)路徑指向同一個(gè)Action,從而提高站點(diǎn)權(quán)重,需要的朋友可以參考下。2016-06-06
C#實(shí)現(xiàn)把圖片下載到服務(wù)器代碼
本文給大家分享的是實(shí)現(xiàn)這樣一個(gè)功能,想將遠(yuǎn)程服務(wù)器的圖片下載到本地主機(jī),圖片的名稱就是數(shù)據(jù)庫(kù)的一個(gè)字段,圖片不是以二進(jìn)制的形式存儲(chǔ)在數(shù)據(jù)庫(kù)的,數(shù)據(jù)庫(kù)存儲(chǔ)的只是圖片的名詞。2015-11-11
asp.net 驗(yàn)證碼的簡(jiǎn)單制作(vb.net+C#)
asp.net中實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼的方法,需要的朋友可以參考下2012-05-05
asp.net利用NamingContainer屬性獲取GridView行號(hào)的方法
在最近的一個(gè)項(xiàng)目中,用到在GridView模板列中添加有DropDownList控件,并開(kāi)啟其AutoPostback屬性。當(dāng)發(fā)生SelectedIndexChanged事件時(shí),想同時(shí)獲取其所在的行號(hào),從而獲取相應(yīng)的行信息。2013-07-07
asp.net 網(wǎng)頁(yè)編碼自動(dòng)識(shí)別代碼
另外一位網(wǎng)友空間/IV提供的代碼,功能同HttpWebRequest獲取網(wǎng)頁(yè)源代碼時(shí)自動(dòng)識(shí)別網(wǎng)頁(yè)編碼2008-09-09
asp.net post方法中參數(shù)取不出來(lái)的解決方法
調(diào)試client端調(diào)用web api的代碼,服務(wù)器端的post方法的參數(shù)死活取不出來(lái),下面有個(gè)不錯(cuò)的解決方法,希望對(duì)大家有所幫助2014-01-01
1個(gè)文件如何輕松搞定Asp.net core 3.1動(dòng)態(tài)頁(yè)面轉(zhuǎn)靜態(tài)頁(yè)面
這篇文章主要給大家介紹了關(guān)于如何通過(guò)1個(gè)文件輕松搞定Asp.net core 3.1動(dòng)態(tài)頁(yè)面轉(zhuǎn)靜態(tài)頁(yè)面的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Asp.net core 3.1具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
ASP.Net開(kāi)發(fā)常見(jiàn)的一些問(wèn)題總結(jié)
ASP.Net開(kāi)發(fā)常見(jiàn)的一些問(wèn)題總結(jié),需要的朋友可以參考一下2013-02-02
使用ASP.NET?Web?API構(gòu)建Restful?API
這篇文章介紹了使用ASP.NET?Web?API構(gòu)建Restful?API的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04

