MEF学习1
1,MEF的核心是可組合組件ComposablePart,它由ComposablePartDefintion來描述和創(chuàng)建。每一個(gè)可組合組件通過定義ExportDefintion向其他組件提供功能,通過ImportDefinition引用其他組件的功能,通過Metadata來描述組件自身的信息。在創(chuàng)建一個(gè)ComposablePart組件后,通過組件目錄(ComposableCatalog)搜索需要 功能實(shí)現(xiàn)組件組合。
2,典型的MEF組合過程
a,創(chuàng)建組件目錄(如AssemblyCatalog)
b,創(chuàng)建組合容器CompositionContainer,組件容器通過組件目錄搜索組件定義
c,創(chuàng)建一個(gè)組件
d,從組件容器獲取其他組件功能 定義,然后執(zhí)行匹配組合
實(shí)例代碼:
//創(chuàng)建一個(gè)組件路,用于從一個(gè)程序集獲取所有的組件定義
var catalog=new AssemblyCatalog(Assembly.GetExecutingAssembly());
//創(chuàng)建一個(gè)組合容器
var container=new CompositionContainer(catalot);
var composablePart=new MyComponet();
container.ComposeParts(composablePart);//執(zhí)行組合,從容器中獲取ExportDefinition并創(chuàng)建實(shí)例組合在一起
//composablePart組合完成以供使用
3,MEF本質(zhì)組合基元
組合基元是對(duì)提供具有可擴(kuò)展,可組合能力的組件的本質(zhì)支持,它處于MEF的最底層,是整個(gè)Framework的核心類,由6個(gè)類構(gòu)成
a,ComposablePart:即可組合組件,是組合基元 核心類
b,ExportDefinition:定義ComposablePart向其他組件提供功能,這個(gè)功能使用一個(gè)ContactName和Metadata來描述。ContactName即使用這個(gè)功能的契約,Metadata用于進(jìn)一步描述這個(gè)功能。
c,ImportDefinition:定義ComposablePart對(duì)其他組件提供的功能引用,即引用 另一個(gè)組件 Exports.
d,ComposableDefinition:即ComposablePart定義
e,ComposablePartCatalog:可組合組件目錄,用于發(fā)現(xiàn)組件
4,MEF使用
a,定義ComposablePartDefinition,MEF通過引入一個(gè)基于特性的編程模型來簡(jiǎn)化ComposablePart的定義,如下所示的MesssasgeSender和Processor類均是ComposablePart定義,以下是代碼片段:
public class MessageSender
{
[Export("MessageSender")]
public void Send(string message)
{
Console.WriteLine(message);
}
}
[Export]
public class Processor
{
[Import("MessageSender")]
public Aciton MessageSender{get;set;}
public void Send()
{
MessageSender("Processed");
}
}
?b,創(chuàng)建ComposablePart
//創(chuàng)建一個(gè)程序集目錄,用于從一個(gè)程序集獲取所有的組件定義
var catalog=new AssemblyCatalog(Assembly.GetExecutingAssembly());
//創(chuàng)建組件目錄
var assemblyCatalog=new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container=new CompositionContainer(assemblyCatalog);//創(chuàng)建組合容器
var processorPart=new Processor();//執(zhí)行組合
processorPart.Send();
Console.ReadLine();
轉(zhuǎn)載于:https://blog.51cto.com/lixinya/1789040
總結(jié)
- 上一篇: C语言指针和链表的体会
- 下一篇: Android——开源框架Univers