1. 基本概念:

    • Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库,在.NET 4.0发布
    • Container:容器,使用CompositionContainer类表示,使用目录提供的部件执行组合操作,即将导入绑定到导出
    • Catalog:目录,存放部件的地方,当需要某个部件时会在目录中寻找,可以作为目录的有type,assembly,directory
    • Part:部件,即实现契约的类
    • Import:导入,使用ImportAttribute进行修饰,可将某个对象声明为Import,可以修饰field,property,parameter等。每个导入都有一个契约,用于匹配对应的导出.可以修饰字段,属性或构造函数参数
    • Export:导出,导出契约的实现,对应一个Import,可以修饰类,字段,属性或者方法
    • Contract:契约,一种约定,代码中表现为接口或者抽象类
  2. 示意图:
  3. 示例代码:
     
    //契约 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基本概念的更多相关文章

  1. Windows phone 应用开发系列教程(更新中)

    Windows phone 应用开发[1]-Text To Speech        作为开篇章节.第一篇将在如下介绍一些Windows phone比较有意思的东西-Text To Speech[文 ...

  2. 如何用 MEF 扩展应用程序

    最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后 ...

  3. 实战MEF(2):导出&导入

    上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路.本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF. 在上一文中我们知道,对于每一个实现了公共规范的扩展组件 ...

  4. (3)MEF插件系统中通信机制的设计和实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 一般的WinForm中通过C#自带的Event机制便能很好的实 ...

  5. (2)从实际项目谈起,基于MEF的插件框架之总体设计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.MEF框架简介 MEF的全称是Managed Extensibil ...

  6. 在.NET Core中使用MEF

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软的可托管扩展框架也移植到.NET Core上了. 可托管扩展框架(Managed ...

  7. MEF的学习笔记

    为什么要使用MEF 在商业应用软件开发过程中,对于各个软件项目,都需要建立相应的系统框架,为了更好的规范系统的开发,提高生产效率,应该在公司级别制定相应的API标准.这些API标准将站在系统架构层次, ...

  8. 快速入门系列--CLR--01基本概念

    在.NET平台用C#这么久,自然会发现其版本很多,相应的概念也会很多,常常都是萌萌哒.而在实际工作中经常会遇到需要配置dll版本号,公钥token等场景,因而对C#.NET.CLR.框架类型等基础概念 ...

  9. MEF入门之不求甚解,但力求简单能讲明白(二)

    在上一篇文章中,我们已经学到了很基本的MEF概念和使用方法. 但我们导出的是一个object类型的实例,只能用来tostring,没有引用部件类库,也不能用里面的成员方法. 本篇,我们逐渐往简单的文件 ...

随机推荐

  1. KCP kcptun

    简介 KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果.纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者 ...

  2. SQL Server 计算汉字笔画函数

    create function [dbo].[fun_getbh](@char nchar(2)) returns int as begin return( case when unicode(@ch ...

  3. zset 有序集合

    zadd key score1 value1 score2 value2 .. 添加元素 redis 127.0.0.1:6379> zadd stu 18 lily 19 hmm 20 lil ...

  4. JQuery (总结)

    延迟触发事件 Ajax异步请求数据 Jquery事件: Focus获得焦点 blur失去焦点 Change内容在变化的时候 Click点击事件 ---------------------------- ...

  5. WIN7把任务栏的的蓝牙图标误删了找回方法

    当时我删了以后,在网上找方法,都说—— 点击任务栏下面的三角箭头,选择自定义,里面有蓝牙图标选项,选择显示图标和通知. 可是我发现我的自定义选项里面就没有蓝牙图标选项啊... 故事的最后,我终于找到了 ...

  6. struts2中各个jar包的具体作用

    -----------------------------------struts2的核心包-------------------------------------- struts2-core-2. ...

  7. net-speeder 安装

    net-speeder net-speeder 在高延迟不稳定链路上优化单线程下载速度 项目由https://code.google.com/p/net-speeder/ 迁入 A program t ...

  8. asp访问数据库原理以及代码

    ActiveX Data Objects (ADO) 是一项容易使用并且可扩展的将数据库访问添加到 Web 页的技术.可以使用 ADO 去编写紧凑简明的脚本以便连接到 Open Database Co ...

  9. 路飞学城Python-Day33

    1.简述计算机操作系统中的“中断”的作用? 为什么有中断? 现代操作系统一般都是采用基于时间片的优先级调度算法,把CPU的时间划分为很细粒度的时间片,一个任务每次只能时间这么多的时间,时间到了就必须交 ...

  10. Facebook 运维内幕曝光:一人管理2万台服务器

    Facebook 运维内幕曝光:一人管理2万台服务器 oschina 发布于: 2013年11月23日 (29评) 分享到  新浪微博腾讯微博 收藏+32 11月30日 珠海 源创会,送U盘,先到先得 ...