您的位置:首页 > 其它

MEF基本概念

2014-09-10 21:48 162 查看
基本概念:

ManagedExtensibilityFramework或MEF是一个用于创建可扩展的轻型应用程序的库,在.NET4.0发布

Container:容器,使用CompositionContainer类表示,使用目录提供的部件执行组合操作,即将导入绑定到导出

Catalog:目录,存放部件的地方,当需要某个部件时会在目录中寻找,可以作为目录的有type,assembly,directory

Part:部件,即实现契约的类

Import:导入,使用ImportAttribute进行修饰,可将某个对象声明为Import,可以修饰field,property,parameter等。每个导入都有一个契约,用于匹配对应的导出.可以修饰字段,属性或构造函数参数

Export:导出,导出契约的实现,对应一个Import,可以修饰类,字段,属性或者方法

Contract:契约,一种约定,代码中表现为接口或者抽象类

示意图:




示例代码:


//契约Contract
publicinterfaceICalculator
{
intAdd(inta,intb);
intSub(inta,intb);
}

//此处我们导出了契约,这就是一个部件(Part)
[Export(typeof(ICalculator))]
publicclassDigitalCalculator:ICalculator
{
publicintAdd(inta,intb)
{
returna+b;
}

publicintSub(inta,intb)
{
returna-b;
}
}

[TestClass]
publicclassDigitalCalculatorTest
{
privateCompositionContainercontainer;

[Import(typeof(ICalculator))]
publicICalculatorcalculator;

publicDigitalCalculatorTest()
{
//AssemblyCatalog目录的一种,表示在相应的程序集中搜索
AssemblyCatalogcatalog=newAssemblyCatalog(typeof(DigitalCalculator).Assembly);
container=newCompositionContainer(catalog);

//组装部件,ComposeParts是扩展方法
container.ComposeParts(this);
}

[TestMethod]
publicvoidAdd_ReturnSum()
{
intx=3,y=2;
intactual=calculator.Add(x,y);
intexpected=5;
Assert.AreEqual(expected,actual);
}

[TestMethod]
publicvoidSub_ReturnDiff()
{
intx=3,y=2;
intactual=calculator.Sub(x,y);
intexpected=1;
Assert.AreEqual(expected,actual);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: