博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本概念
阅读量:6253 次
发布时间:2019-06-22

本文共 1924 字,大约阅读时间需要 6 分钟。

其实个人觉得MEF和WCF有点类似吧,都是要通过一个接口实现的形式来达到传递信息并且使用的目的

以下是个人从网络上一些高手学习来使用的一些经验吧,或者是学习的心得吧

一、基本概念

  • MEF:Managed Extensibility Framework,.NET 4.0中带来的一个基于托管的扩展程序开发框架(挺拗口的,不过只是概念),另外通过强大的百度百科,我们发现MEF还是“小鼠胚胎成纤维细胞”的简称(这货是?)。
  • Contract:契约,即一种约定,具体在代码中表现为接口和抽象类。自从进入.NET 4.0,契约这个单词我们应该不会陌生,WCF中贯穿着各种契约,无论如何,契约就是一种约定。
  • Import:导入,导入契约的实现,说明此处需要一个实现的契约。
  • Export:导出,导出契约的实现,说明相应的类中实现了相应的契约。
  • Part:部件,即实现契约的类。
  • Catalog:目录(我是这样定义的),存放部件的地方,当需要某个部件时,会在目录中寻找。
  • Container:容器,存放目录并进行部件管理,如导出、导入等。
  • Compose:组装,通过容器在目录中寻找到实现了相应契约的部件,进行部件的组装。

高手做了一章图

其实就是把部件从catlog中为了实现导出来,先从容器里面读取出来,然后导入到Compsoe里面进行组装最后实现实例化

 

使用先添加对MEF库的引用,即“System.ComponentModel.Composition”。

 

三、基本使用示例

1、添加一个契约

//这便是我们的契约 Contract,其实说白了就是接口public interface ICalculator {    int Add(int a, int b);    int Sub(int a, int b);}

2、实现这个契约

 

//此处我们导出了契约,这就是一个部件   [Export(typeof(ICalculator))]   public class MyCalculator : ICalculator {       public int Add(int a, int b) {           Console.WriteLine("Add Invoked");           return a + b;       }       public int Sub(int a, int b) {           Console.WriteLine("Sub Invoked");           return a - b;       }   }

3、完成测试程序

 

class Program {    private static CompositionContainer _container;    static void Main(string[] args) {        //AssemblyCatalog 目录的一种,表示在相应的程序集中搜索        var catalog = new AssemblyCatalog(typeof(Program).Assembly);        _container = new CompositionContainer(catalog);        MathCompute mathCompute = new MathCompute();        _container.ComposeParts(mathCompute);//组装部件        Console.WriteLine(mathCompute.Add(1, 3));        Console.WriteLine(mathCompute.Sub(3, 2));        Console.ReadLine();    }}public class MathCompute {    //我们需要导入这个契约实现的部件    [Import(typeof(ICalculator))]    private ICalculator _calculator;    public int Add(int a, int b) {        return _calculator.Add(a, b);    }    public int Sub(int a, int b) {        return _calculator.Sub(a, b);    }}

这里我感觉他写的这个例子没有任何意义,重在使用吧,我们初学者总归要来学习学习,查阅了相关资料补充下

 

转载地址:http://wpysa.baihongyu.com/

你可能感兴趣的文章
装逼语录:
查看>>
PHP函数
查看>>
[Leetcode]414. Third Maximum Number
查看>>
UTC引发时区配置和Linux系统时间和bios时间问题
查看>>
C语言32个关键字
查看>>
图像处理之canny---求梯度
查看>>
OpenGL编程轻松入门之一个简单的例子
查看>>
MVC控制器返回重定向操作
查看>>
LINUX总结
查看>>
编译php5.4的时候出现错误----configure: error: in `/usr/local/src/php540/php-5.4.0':
查看>>
机器学习编程01_线性回归
查看>>
Markdown语法
查看>>
《CSS世界》读书笔记(十六)
查看>>
初入前端
查看>>
(回文串 )Best Reward -- hdu -- 3613
查看>>
最少拦截系统------LCS--------动态规划
查看>>
关于EOF的种种。
查看>>
h5 拍照上传 代码
查看>>
javascript 通用定义
查看>>
语文文法
查看>>