MEF为.net 4.0中默认的容器.以比较的方式来学习此框架.看看有没新概念.

步骤
1.注册容器对象
2.加载注册对象(尚未实例化)
3.创建容器
4.从容器中取对象
5.创建策略

一.注册容器对象

1.挂标签,这里称为导入

public interface IMessageSender
{void Send(string message);
}[Export(typeof(IMessageSender))]
public class EmailSender : IMessageSender
{public void Send(string message){Console.WriteLine(message);}
}

因其框架自称为轻量级,所以采用Attribute的形式,其缺点在于你一旦换了依赖注入的框架(就是你不用MEF了),那么就意味着你得去掉的标签.
关于标签定义参考如下
http://mef.codeplex.com/wikipage?title=Declaring%20Exports&referringTitle=Guide

二.加载注册对象

即将对象加载到容器中
参考此http://mef.codeplex.com/wikipage?title=Using%20Catalogs&referringTitle=Guide,
根据实际情况而定

三.创建容器

AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);

四.取容器对象

1.通过容器本身取对象,即GetExportedValue方法
2.在容器中已注册对象,有能力自己取得对象
必须先使用ComposeParts方法,该对象才可以使用容器中对象

一般分为以下几种

  1. 属性注入
  2. 构造注入
  3. 方法注入

参考如下
http://mef.codeplex.com/wikipage?title=Declaring%20Imports&referringTitle=Guide
3.延迟加载
当对象以Lazy为容器加载,可以实现延迟加载,这是MEF特有的,
参考如下http://mef.codeplex.com/wikipage?title=Lazy%20Exports&referringTitle=Guide

[Import]
public Lazy<IMessageSender> MessageSender { get; set; }

五.创建策略

即对象创建出来是单例还是每次都实例化,参考此
http://mef.codeplex.com/wikipage?title=Parts%20Lifetime&referringTitle=Guide

[PartCreationPolicy(CreationPolicy.NonShared)][Export(typeof(IMessageSender))]public class SmtpSender : IMessageSender{}

还有其他一些细节就参考msdn吧.
http://msdn.microsoft.com/en-us/library/ee155691.aspx

转载于:https://www.cnblogs.com/Clingingboy/archive/2010/06/23/1763329.html

MEF(Managed Extensibility Framework)学习笔记相关推荐

  1. Sofa framework 学习笔记

    学习过程中从知乎大佬那里学到好多:SOFA Framework已编译版本下载和使用指南,感谢! 另外还参考了站内一个大佬的文章:Sofa framework get started,感谢! 0. 软件 ...

  2. Managed Extensibility Framework (MEF)

    http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx [.NET] 浅谈可扩展性框架:MEF 转载于:https://www. ...

  3. ASP.NET MVC 3 Framework 学习笔记

    前段时间因项目需要对ASP.NET MVC3进行了系统的学习,完成项目后感觉对原书中有些知识点还有一些理解不够透彻的地方,因此将<Freeman A. Sanderson S. -  Pro A ...

  4. Entity Framework 学习笔记(1)

    开始从头系统地学习Entity Framework,当前的稳定版本为6.1.3,Nuget主页 http://www.nuget.org/packages/EntityFramework/ 微软喜欢把 ...

  5. entity framework学习笔记

    学习ef首先要介绍一些基本的概念. 1,概念模型: 就是讲世界上具体的事物抽象为某一种信息结构,这种结构并不依赖于某种计算机,不是某种数据库 支持的数据模型,而是一种概念性的模型.如下图 2,ef的实 ...

  6. Django REST framework学习笔记

    文章目录 1. API接口开发 1.1 获取数据的接口 1.2 添加数据的接口 1.3 更新数据的接口 1.4 删除数据的接口 2. API字段的定制 2.1 别名字段 2.2 字段格式化 2.3 字 ...

  7. Game Framework学习笔记(1):初识Game Framework

    写在前面 什么是Game Framework Game Framework是一个基于 Unity 5.3+ 引擎的游戏框架 ,完全开源.功能强大且作者一直在更新功能. 它主要对游戏开发过程中常用模块进 ...

  8. Blueprint CSS Framework 学习笔记

    学习这篇文章之前,请先学习 CSS设计彻底研究"视频教程目录 http://learning.artech.cn/20070430.css-reserch-content-table.htm ...

  9. Entity Framework学习笔记——EF简介(一篇文章告诉你什么是EF)

    Entity Framework是以ADO.NET为基础,面向数据的"实体框架".以下简称EF. 它利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity ...

  10. UiPath Robotic Enterprise Framework 学习笔记

    The Robotic Enterprise Framework (ReFramework) is a UiPath Studio template built using state machine ...

最新文章

  1. 设计模式=相似模式区别
  2. mysql insert报错_mysql数据库使用insert语句插入中文数据报错
  3. “SHOT NOTE”新文具,构建虚实之桥
  4. php上传图片类型代码,php 上传图片的代码
  5. Jenkins入门系列之——03PDF文档下载
  6. Source Server + Symbol Server
  7. (转)解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
  8. swift继承与重载
  9. Python爬虫入门以爬取当当商城图片为例
  10. 提升方法AdaBoost你真的懂吗
  11. kali清理_linux下清理系统垃圾
  12. 随笔——物质与思想(或称意识)
  13. Android 反编译资料整理
  14. 汽车厂商集体大降价,谁更受伤?
  15. 五轴数控转台_什么是五轴联动数控机床
  16. 你们怎么都有自己的聊天机器人?给我也来一个!
  17. HTML5期末大作业:关于我的家乡——四川文化(4页) HTML+CSS+JavaScript
  18. 如何推进中小学STEM教育课程开发和实施
  19. SEO 优化,网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)...
  20. python实现火车票查询_Python3 实现火车票查询工具

热门文章

  1. jQuery创建Dom元素
  2. SQL的一个排序的问题
  3. [Tip]ActiveScaffold本地化
  4. java中awt和swing是的关系以及区别
  5. Intelligence System HDU - 3072(强连通分量)
  6. NYOJ 138 找球号(二) (哈希)
  7. 【database】oracle触发器基础
  8. Oracle的去重函数 distinct
  9. 驰骋工作流引擎-自由表单
  10. PAT1030.——完美数列