MEF基本概念
- 基本概念:
- 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);
} }
MEF基本概念的更多相关文章
- Windows phone 应用开发系列教程(更新中)
Windows phone 应用开发[1]-Text To Speech 作为开篇章节.第一篇将在如下介绍一些Windows phone比较有意思的东西-Text To Speech[文 ...
- 如何用 MEF 扩展应用程序
最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后 ...
- 实战MEF(2):导出&导入
上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路.本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF. 在上一文中我们知道,对于每一个实现了公共规范的扩展组件 ...
- (3)MEF插件系统中通信机制的设计和实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 一般的WinForm中通过C#自带的Event机制便能很好的实 ...
- (2)从实际项目谈起,基于MEF的插件框架之总体设计
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.MEF框架简介 MEF的全称是Managed Extensibil ...
- 在.NET Core中使用MEF
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软的可托管扩展框架也移植到.NET Core上了. 可托管扩展框架(Managed ...
- MEF的学习笔记
为什么要使用MEF 在商业应用软件开发过程中,对于各个软件项目,都需要建立相应的系统框架,为了更好的规范系统的开发,提高生产效率,应该在公司级别制定相应的API标准.这些API标准将站在系统架构层次, ...
- 快速入门系列--CLR--01基本概念
在.NET平台用C#这么久,自然会发现其版本很多,相应的概念也会很多,常常都是萌萌哒.而在实际工作中经常会遇到需要配置dll版本号,公钥token等场景,因而对C#.NET.CLR.框架类型等基础概念 ...
- MEF入门之不求甚解,但力求简单能讲明白(二)
在上一篇文章中,我们已经学到了很基本的MEF概念和使用方法. 但我们导出的是一个object类型的实例,只能用来tostring,没有引用部件类库,也不能用里面的成员方法. 本篇,我们逐渐往简单的文件 ...
随机推荐
- kafka windows安装 命令行下使用测试
1.zookeeper安装: (https://zookeeper.apache.org/releases.html) ①进入zookeeper的相关设置所在的文件目录,例如本文的:D:\bigd ...
- struts2学习之基础笔记7
第十二章 Struts 2的标记库 1 OGNL简介 Object-Grephic Navigtor Language 图对象导航语言 作用:图对象导航语言是Struts 2标记库中为其相应标记属性进 ...
- DirectUI界面编程(四)界面布局详解
Duilib的界面布局使用xml文件进行描述,在Duilib v1.1版本的xml布局文件中我们可以使用以下这些标签(后续版本标签有扩充): 这些标签总的来讲可以分为三类: 窗口类,该类别中只有一个W ...
- html 编码与解码
var HtmlUtil = { /*1.用浏览器内部转换器实现html转码*/ htmlEncode:function (html){ //1.首先动态创建一个容器标签元素,如DIV var tem ...
- 编码介绍(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)
转载:http://blog.jobbole.com/30526/(前面内容)和http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf ...
- RAP开发入门-运行第一个HelloWorld(二)
环境搭建好了之后我们就可以照惯例运行第一个helloworld程序了. (ps:这里钉几个资料吧 官网开发指导:http://help.eclipse.org/indigo/index.jsp?top ...
- NodeJS加密算法(转)
nodejs中常用加密算法 1.Hash算法加密: 创建一个nodejs文件hash.js,输入内容如下: 1 var crypto = require('crypto'); //加载crypto ...
- BZOJ 2329/2209 [HNOI2011]括号修复 (splay)
题目大意: 让你维护一个括号序列,支持 1.区间修改为同一种括号 2.区间内所有括号都反转 3.翻转整个区间,括号的方向不变 4.查询把某段区间变为合法的括号序列,至少需要修改多少次括号 给跪了,足足 ...
- [读书笔记] R语言实战 (四) 基本数据管理
1. 创建新的变量 mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8)) #方法一 mydata$sumx<-mydata$x1+mydata$x ...
- SparkSql初级编程实践
1.Spark SQL 基本操作将下列 JSON 格式数据复制到 Linux 系统中,并保存命名为 employee.json.{ "id":1 , "name" ...