MEF基本概念
2024-09-06 09:52:49
- 基本概念:
- Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库,在.NET 4.0发布
- Container:容器,使用CompositionContainer类表示,使用目录提供的部件执行组合操作,即将导入绑定到导出
- Catalog:目录,存放部件的地方,当需要某个部件时会在目录中寻找,可以作为目录的有type,assembly,directory
- Part:部件,即实现契约的类
- Import:导入,使用ImportAttribute进行修饰,可将某个对象声明为Import,可以修饰field,property,parameter等。每个导入都有一个契约,用于匹配对应的导出.可以修饰字段,属性或构造函数参数
- Export:导出,导出契约的实现,对应一个Import,可以修饰类,字段,属性或者方法
- Contract:契约,一种约定,代码中表现为接口或者抽象类
- 示意图:
- 示例代码:
//契约 Contract
public interface ICalculator
{
int Add(int a, int b);
int Sub(int a, int b);
} //此处我们导出了契约,这就是一个部件(Part)
[Export(typeof(ICalculator))]
public class DigitalCalculator : ICalculator
{
public int Add(int a, int b)
{
return a + b;
} public int Sub(int a, int b)
{
return a - b;
}
} [TestClass]
public class DigitalCalculatorTest
{
private CompositionContainer container; [Import(typeof(ICalculator))]
public ICalculator calculator; public DigitalCalculatorTest()
{
//AssemblyCatalog 目录的一种,表示在相应的程序集中搜索
AssemblyCatalog catalog = new AssemblyCatalog(typeof(DigitalCalculator).Assembly);
container = new CompositionContainer(catalog); //组装部件,ComposeParts是扩展方法
container.ComposeParts(this);
} [TestMethod]
public void Add_ReturnSum()
{
int x = , y = ;
int actual = calculator.Add(x, y);
int expected = ;
Assert.AreEqual(expected, actual);
} [TestMethod]
public void Sub_ReturnDiff()
{
int x = , y = ;
int actual = calculator.Sub(x, y);
int expected = ;
Assert.AreEqual(expected, actual);
} }
最新文章
- 使用vlc进行二次开发做自己的播放器
- Java的Json解析包FastJson使用
- 1293. 3n+1数链问题 2016 12 23
- UnWind Segue
- 【C语言】17-预处理指令3-文件包含
- web 前端:连接mysql中文乱码问题的解决办法
- ubuntu无线上网静态ip配置以及配置静态IP 之后无法正常上网的解决方案
- JavaScript 数据类型转换(显式与隐式)
- ASP.NET内核几大对象、ASP.NET核心知识(7)--转载
- FZOJ2111:Min Number
- Linux命令不熟悉(记录)
- ABP+AdminLTE+Bootstrap Table权限管理系统第九节--AdminLTE模板页搭建
- SQL查询操作及子句优先级
- 256.Spring Boot+Spring Security: MD5是加密算法吗?
- JavaScript中的this所引用的对象和如何改变这个引用
- ListBox滚动条 刷新列表之后 指定位置(置顶或滚动到最后)
- DVWA的安装与简单使用
- topcoder srm 692 div1 -23
- Loadrunner 脚本录制策略
- Nginx的虚拟主机