[MEF]第04篇 MEF的多部件导入(ImportMany)和目录服务
2015-04-08 23:31
357 查看
一、演示概述
此演示介绍了MEF如何使用ImportMany特性同时导入多个与相同约束相匹配的导出部件,并且介绍了目录服务(Catalog),该服务告知MEF框架可以在什么地方去搜寻与指定约束匹配的导出部件,即导出部件位于什么地方。
相关下载(屏幕录像、代码):http://yunpan.cn/cVdN5JHeQrJgI
访问密码 065d
温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到524130780@QQ.COM
欢迎有兴趣研究.NET相关技术的网友加QQ群:18507443
二、多部件导入ImportMany
部件的导出设置不做任何改变,将导入地方做类似如下的修改:
1、使用ImportMany特性,而不是Import特性。
2、使用的是IEnumerable<T>类型来封装导入的部件。因为,导入的可能是多个部件,需要一种集合的方式来承载。
导入元素做了如上的修改后,调用时只需要遍历即可访问每个导出部件。如下代码所示:
三、目录服务(Catalog)
在MEF中,所谓的目录(Catalog)是不同于文件系统中的目录(Directory),而它的作用就是告知MEF框架可以在什么地方去查找导出部件,比如:
AssemblyCatalog:在指定的程序集中查找导出部件。
DirectoryCatalog:在指定的文件目录中查找导出部件,在构造函数中可传递文件目录,可以是绝对路径或相对路径。
代码如下:
四、相关资源
1、MSDN官方资料:http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx
此演示介绍了MEF如何使用ImportMany特性同时导入多个与相同约束相匹配的导出部件,并且介绍了目录服务(Catalog),该服务告知MEF框架可以在什么地方去搜寻与指定约束匹配的导出部件,即导出部件位于什么地方。
相关下载(屏幕录像、代码):http://yunpan.cn/cVdN5JHeQrJgI
访问密码 065d
温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到524130780@QQ.COM
欢迎有兴趣研究.NET相关技术的网友加QQ群:18507443
二、多部件导入ImportMany
部件的导出设置不做任何改变,将导入地方做类似如下的修改:
[ImportMany(typeof(ILogger))] public IEnumerable<ILogger> Loggers { get; set; }上述代码和单个部件的导入有两点区别:
1、使用ImportMany特性,而不是Import特性。
2、使用的是IEnumerable<T>类型来封装导入的部件。因为,导入的可能是多个部件,需要一种集合的方式来承载。
导入元素做了如上的修改后,调用时只需要遍历即可访问每个导出部件。如下代码所示:
static void Main(string[] args) { Program program = new Program(); program.Compose(); foreach (ILogger logger in program.Loggers) { logger.WriteLog("Hello World!"); } Console.ReadLine(); }
三、目录服务(Catalog)
在MEF中,所谓的目录(Catalog)是不同于文件系统中的目录(Directory),而它的作用就是告知MEF框架可以在什么地方去查找导出部件,比如:
AssemblyCatalog:在指定的程序集中查找导出部件。
DirectoryCatalog:在指定的文件目录中查找导出部件,在构造函数中可传递文件目录,可以是绝对路径或相对路径。
代码如下:
/// <summary> /// 通过容器对象将宿主和部件组装到一起。 /// </summary> public void Compose() { AggregateCatalog aggregateCatalog = new AggregateCatalog(); AssemblyCatalog assemblyCatalog = new AssemblyCatalog(typeof(Program).Assembly); DirectoryCatalog directoryCatalog = new DirectoryCatalog("imps"); aggregateCatalog.Catalogs.Add(assemblyCatalog); aggregateCatalog.Catalogs.Add(directoryCatalog); var container = new CompositionContainer(aggregateCatalog); container.ComposeParts(this); }上述代码中有一个AggregateCatalog的目录类,这是一个聚合目录,它可以将多个目录组织在一起,比如上列中的AssemblyCatalog和DirectoryCatalog。这样,MEF就会在多个地方去搜寻匹配的导出部件。
四、相关资源
1、MSDN官方资料:http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx
相关文章推荐
- [MEF]第04篇 MEF的多部件导入(ImportMany)和目录服务
- MEF程序设计指南六:MEF中的目录服务(DeploymentCatalog) 推荐
- 【转】MEF程序设计指南六:MEF中的目录服务(DeploymentCatalog)
- ActiveDirectory 目录服务导入到 Microsoft Office SharePoint Portal Server 2003
- 红帽目录服务的数据导入导出
- MEF程序设计指南六:MEF中的目录服务(DeploymentCatalog)
- MEF程序设计指南六:MEF中的目录服务(DeploymentCatalog)
- MEF程序设计指南六:MEF中的目录服务(DeploymentCatalog)
- MEF程序设计指南六:MEF中的目录服务(DeploymentCatalog)
- [导入]针对 Windows 2003 操作系统的服务优化方案!
- 使用ADSI开发NT目录服务会出现的一些问题及解决办法
- [导入]windows服务安装问题解决
- [导入]干掉Google Base? 微软欲推Fremont服务
- 如何通过活动目录(ADSI)修改IIS6中的 Web 服务扩展
- 目录服务中LDAP的基本模型
- [导入]出现windows启动服务失败(无法从命令行或调试器启动,需要安装InstallUtil.exe)的解决办法
- 目录服务中LDAP的基本模型
- [导入]Visual Studio 2005 Team Edition软件架构系列课程(2):开发面向服务的应用
- AD学习笔记8——活动目录服务的基本安装和配置
- 目录服务中LDAP的基本模型