实战MEF(4)搜索范围

在前面的文章中,几乎每个示例我们都会接触到扩展类的搜索位置,我们也不妨想一下,既然是自动 扩展,它肯定会有一个或者多人可供查找的位置,不然MEF框架怎么知道哪里有扩展组件呢?

就像我 们用导航系统去查找某个地方的所有旅店一样,正因为在该地的旅店已在数据库中注册了相关信息,我 们的导航系统才能查找到它,如果某家旅店没有向导航数据库提供任何数据,那很显然导航系统是无法 识别到它的详细地址的。

MEF对扩展组件的查找范围通常有三个:

AssemblyCatalog:从某个程序集中查找。

ApplicationCatalog:在应用程序所在的目录下查找。

DirectoryCatalog:在某个目录下查找,如D:\\Libs。

如果你还嫌不够的话,可以用AggregateCatalog来设置多个查找范围。

下面我们来逐个尝试 一下。

AssemblyCatalog

基于某个程序集的范围查找,最常干的是在当前程序集内查找,当然也可以在其他程序集中查找。只 要能得到一个Assembly对象就可以在其中查找,大家都那么聪明,我相信大家能理解的。

下面是 一个典型的做法,例子是在当前程序集中查找扩展部件的。

首先,我们定义一个用于规范扩展部 件行为的接口。

然后,写两个类来实现上 面的接口,并将它们导出。

时间: 2024-10-29 04:32:29

实战MEF(4)搜索范围的相关文章

实战MEF(1)一种不错的扩展方式

在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生 成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程 序来说是可以接受的,而对于像ERP系统那样复杂而且常常需要扩展的应用程序,这种扩展方法就不够方 便,因为每次都要修改源代码或重新引用组件. 尤其是组件(许多dll),如果每编写一个新组 件又要在主项目中引用一次,显然主项目就不得不经常重新生成.要是能有一种机制,可以在主项目应 用程序不作任何修改就可以自动识别并扩展组

实战MEF(5)导出元数据

如何理解元数据 我们可以把元数据理解为随类型一起导出的附加信息.有时候我们会考虑, 把元数据随类型一并导出,增加一些说明,使得我们在导入的时候,可以多一些筛选条件. 默 认的类型导出带有元数据吗 上面的内容我说得比较简洁,也许您不是很理解,不要紧,在编程 里面,很多东西我们都是写了代码后才理解的.所以,我的理论功底比较差,最不擅长的就是长篇大论 ,还是从代码中看吧. 我们首先要弄清楚一下问题:在我没有手动去添加元数据的默认导出类型 ,是否带有元数据.为了使代码更简单,这里我直接把一个类导出,而不

实战MEF(3)只导出类的成员

通过前面两篇文章的介绍,相信各位会明白MEF中有不少实用价值.上一文中我们也讨论了导入与导 出,对于导出导入,今天我们再深入一点点,嗯,只是深入一点点而已,不会很难的,请大家务必放心 ,如果大家觉得看文章枯燥,不妨一边喝牛奶一边阅读. 上一文中我们都是把整个类型(整个类 )进行导出,不过有时候,我们可能会考虑只导出类的某些成员,比如某个属性或某个字段等. 我们还是少说理论,免得大家喝不下牛奶,还是直接上菜吧.为了便于测试,以下示例把组件都写在当 前程序集中,也就是在同一个项目,然后用Assemb

实战MEF(2)导出及导入

上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路.本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF. 在上一文中我们知道,对于每一个实现了公共规范的扩展组件,都需要进行导出,随后我们的主应用程序文件中会自动进行组装.这便产生了一个疑问:为什么需要导出? 如果大家还记得,以前我们用VC++写.dll文件时,都会把需要提供给别人调用的函数标记为导出函数,这样别人才能调用我们编写的函数.就好比我们的家,我们一般会有客厅,既然叫客厅,当然是展现给客人看的.有客

300+篇运维、数据库等实战资料免费下载(文章+PDF+视频,持续更新)

2017年已过去一半,在此小编为大家精心整理了2017上半年热点事件解析.实战技术资料以及特别策划短视频系列,希望可以帮助大家更深入地回顾上半年的技术热点,并储备更充足的技术干粮继续2017的下一半. PART 1 峰会回顾资料 云栖大会 [上海云栖大会]2017云栖大会上海峰会资料合计(现场视频+PDF下载) [成都云栖大会]2017云栖大会成都峰会资料合计(现场视频+PDF下载) [南京云栖大会]2017云栖大会南京峰会资料合计(现场视频+PDF下载) 技术峰会 [运维/DevOps峰会]

UI实战指南之留在电脑里的字体(一)

  进阶学习最实用教材!这一由@牛MO王涵 (BigDesign创始人/设计总监)编写的系列文章,从字体选择到提升设计感的技巧等都有涉猎,话题虽广,但全是实战过程中最关键的要素,而且是新手最关心的操作部分,学完直接上手工作 >>> 前言:我来了,这是U1系列新开篇章实战篇,不仅仅是适用于UI设计,甚至包含网页设计.平面设计.在文章中会更多的介绍一些操作上的教学,希望对新人们有帮助. 推荐字体 很多小伙伴在做设计的时候,无论是排版还是展示,都不太注重字体,或者有些太过于注重以至于用了很多种

品牌H5营销完全实战指南

那些百万PV的H5都是怎么做的?精心打造的H5要如何推广?H5技术将如何发展?本文一一为你解答 >>> 作者微信号,欢迎关注:Social Talent 对于H5这个名词想必大家已经很熟悉了,就在2014年,一项本来还不太成熟的技术在微信的社交舞台下大放异彩,让我们见识了"移动+社交"爆发的巨大能量. 然而这不是偶然,而是趋势.在具体介绍H5营销之前,我想和大家分享一份eMarketer的数据,其中显示了2012年-2018年品牌在不同媒体渠道的预算比重: 相比电视.

视频出炉:4月15日《阿里云RDS MySQL分支深度定制实战分享》

活动视频 <阿里云RDS MySQL分支深度定制实战分享> PDF地址:https://oss.aliyuncs.com/yqfiles/a5344b5961b367786a95620c636c4640.pdf 分享简介:阿里云RDS MySQL经过多年的积累,不断的进行性能优化,并定制了适合不同行业需求的功能,同时也向官方和社区贡献力量.本次主题主要介绍RDS MySQL分支的深度定制,包括功能扩展.资源管控.性能优化.数据安全.行业解决方案等. 分享者:赵建伟,现任阿里云数据库内核资深研发

113期:电子书《阿里巴巴技术实战2016年刊》重磅发布,免费下载!

本期头条   • [资料合集]首届阿里开源峰会回顾:讲义PDF+活动视频! • [在线峰会]即将直播:大数据技术峰会 • 微博红包技术最佳实践:架构及运维 • 阿里开源数据库AliSQL最佳实践   技术干货   如何使用好阿里云的网络安全隔离?深入分享阿里云ECS安全组实践经验 阿里云的ECS有经典网络和专有网络(VPC)两种网络类型.新业务建议优先考虑VPC网络,阿里云也将于年中开放经典网络的存量服务器向VPC网络迁移的功能.对于大家关注的云服务器的网络安全实践内容,我们特别邀请专家进行了深