MEF(Managed Extensibility Framework)学习笔记
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方法,该对象才可以使用容器中对象
一般分为以下几种
- 属性注入
- 构造注入
- 方法注入
参考如下
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)学习笔记相关推荐
- Sofa framework 学习笔记
学习过程中从知乎大佬那里学到好多:SOFA Framework已编译版本下载和使用指南,感谢! 另外还参考了站内一个大佬的文章:Sofa framework get started,感谢! 0. 软件 ...
- Managed Extensibility Framework (MEF)
http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx [.NET] 浅谈可扩展性框架:MEF 转载于:https://www. ...
- ASP.NET MVC 3 Framework 学习笔记
前段时间因项目需要对ASP.NET MVC3进行了系统的学习,完成项目后感觉对原书中有些知识点还有一些理解不够透彻的地方,因此将<Freeman A. Sanderson S. - Pro A ...
- Entity Framework 学习笔记(1)
开始从头系统地学习Entity Framework,当前的稳定版本为6.1.3,Nuget主页 http://www.nuget.org/packages/EntityFramework/ 微软喜欢把 ...
- entity framework学习笔记
学习ef首先要介绍一些基本的概念. 1,概念模型: 就是讲世界上具体的事物抽象为某一种信息结构,这种结构并不依赖于某种计算机,不是某种数据库 支持的数据模型,而是一种概念性的模型.如下图 2,ef的实 ...
- Django REST framework学习笔记
文章目录 1. API接口开发 1.1 获取数据的接口 1.2 添加数据的接口 1.3 更新数据的接口 1.4 删除数据的接口 2. API字段的定制 2.1 别名字段 2.2 字段格式化 2.3 字 ...
- Game Framework学习笔记(1):初识Game Framework
写在前面 什么是Game Framework Game Framework是一个基于 Unity 5.3+ 引擎的游戏框架 ,完全开源.功能强大且作者一直在更新功能. 它主要对游戏开发过程中常用模块进 ...
- Blueprint CSS Framework 学习笔记
学习这篇文章之前,请先学习 CSS设计彻底研究"视频教程目录 http://learning.artech.cn/20070430.css-reserch-content-table.htm ...
- Entity Framework学习笔记——EF简介(一篇文章告诉你什么是EF)
Entity Framework是以ADO.NET为基础,面向数据的"实体框架".以下简称EF. 它利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity ...
- UiPath Robotic Enterprise Framework 学习笔记
The Robotic Enterprise Framework (ReFramework) is a UiPath Studio template built using state machine ...
最新文章
- 设计模式=相似模式区别
- mysql insert报错_mysql数据库使用insert语句插入中文数据报错
- “SHOT NOTE”新文具,构建虚实之桥
- php上传图片类型代码,php 上传图片的代码
- Jenkins入门系列之——03PDF文档下载
- Source Server + Symbol Server
- (转)解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
- swift继承与重载
- Python爬虫入门以爬取当当商城图片为例
- 提升方法AdaBoost你真的懂吗
- kali清理_linux下清理系统垃圾
- 随笔——物质与思想(或称意识)
- Android 反编译资料整理
- 汽车厂商集体大降价,谁更受伤?
- 五轴数控转台_什么是五轴联动数控机床
- 你们怎么都有自己的聊天机器人?给我也来一个!
- HTML5期末大作业:关于我的家乡——四川文化(4页) HTML+CSS+JavaScript
- 如何推进中小学STEM教育课程开发和实施
- SEO 优化,网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)...
- python实现火车票查询_Python3 实现火车票查询工具