目录(Catalogs)

 
MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力。目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出。下面列出 MEF 提供的目录。 
 
 
程序集目录(Assembly Catalog)
 
为了发现给定程序集所有导出,需要使用 [System.ComponentModel.Composition.Hosting.AssemblyCatalog]。
 
            var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); 
 
文件目录(Directory Catalog)
 
为了发现目录中所有程序集的所有导出,需要使用 [System.ComponentModel.Composition.Hosting.DirectoryCatalog]。
 
            var catalog = new DirectoryCatalog("Extensions"); 

如果使用相对目录,这就相对于当前 AppDomain 的根目录。

DirectoryCatalog 会一次性扫描目录,但是在目录有变动时候不会自动刷新。然而,你可以实现自己的扫描机制,调用 Catalog 的 Refresh() 方法进行扫描。一旦重新扫描(Rescans),重组(Recomposition)就会发生。
 
            var catalog = new DirectoryCatalog("Extensions");
// 实现扫描的逻辑
catalog.Refresh();
注意:Silverlight 不支持 DirectoryCatalog。 
 
 
聚集目录(Aggregate Catalog)
 
 
当程序集目录和文件目录不能独自地满足要求或者是需要合并目录,需要使用 [System.ComponentModel.Composition.Hosting.AggregateCatalog]。AggregateCatalog 组合多个目录到单一的目录。一种常见的模式是:不仅添加当前执行的程序集,而且添加三方扩展的文件目录。你可以传递 Catalogs 集合到 AggregateCatalog 构造器,或者直接添加 Catalogs 集合,例如:catalog.Catalogs.Add(...)
 
            var catalog = new AggregateCatalog(
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog("Extensions")); 
 
类型目录(Type Catalog)
 
为了发现特定类型集合的所有导出,使用 [System.ComponentModel.Composition.Hosting.TypeCatalog]。
 
 
    var catalog = new TypeCatalog(typeof(type1), typeof(type2), ...);
发布目录(DeploymentCatalog) - 适用于 Silverlight
 
Sliverlight 中的 MEF 包含 DeploymentCatalog 用于动态地下载远程的 XAPs。更多参考 DeploymentCatalog 章节。
 
 
为容器(Container)使用目录(Catalog)
 
 
为容器使用目录,简单地把目录传递给容器的构造器。
 
            var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
原文:

MEF 编程指南(七):使用目录的更多相关文章

  1. MEF 编程指南(二):定义可组合部件和契约

    可组合部件(Composable Parts)   在 MEF 内部可组合部件是一个可组合单元.可组合部件导出其他可组合部件需要的服务,并且从其他可组合部件导入服务.在 MEF 编程模型中,可组合部件 ...

  2. MEF 编程指南(八):过滤目录

    当使用子容器的时候,基于特定的标准(Specific Criteria)过滤目录是很必要的.比如,基于部件构造策略的过滤器是很常见的.下面的代码片段演示了如何构建的特殊途径(Particular Ap ...

  3. MEF 编程指南(十二):批量组合

    MEF 容器实例并非不可变的.如果目录支持改变(像监控目录变动)或者在运行时添加/移除部件都可能发生改变.以前,你不得不做出改动并且调用 CompositionContainer 上的 Compose ...

  4. MEF 编程指南(十):重组

    有些应用程序被设计成在运行时动态地改变.例如,一个新的扩展可能被下载,或者其他原因变得不可用.MEF 依靠我们称之为重组(Composition)的技术处理,在初始化组合以后改变导入值的场景.   导 ...

  5. MEF 编程指南(九):部件生命周期

    理解 MEF 容器部件生命周期和实现是非常重要的事情.考虑到 MEF 关注可扩展应用程序.这变得尤为重要.生命期可以解释为期望部件的共享性(transitively, its exports)   共 ...

  6. MEF 编程指南(一):在应用中托管 MEF

    在应用程序中托管(Hosing) MEF 涉及到创建组合容器(CompositionContainer) 实例,添加可组合部件(Composable Parts),包括应用程序宿主(Host)本身并进 ...

  7. MEF 编程指南(十一):查询 CompositionContainer

    CompositionContainer 公开了一部分获取导出.导出对象以及两者集合的重载.   在这些方法重载中,你应该遵循下面的共享行为准则 - 除非特别说明.   当请求单一实例的时候,如果没发 ...

  8. MEF 编程指南(六):导出和元数据

    声明导出解释了部件导出服务的基础知识和价值观(Values).有时候出于种种原因,导出关联信息是非常必要的.通常,用于解释关于功能公共契约的具体实现.允许导入满足约束要求的导出,或者导入所有可用的实现 ...

  9. MEF 编程指南(五):延迟导出

    在组合部件的时候,导入将会触发部件(部件集合)的实例化,为原始的请求部件公开必要的导出需求.对于有些应用程序,推迟实例化 - 并且防止递归组合图(Recursive Composition Down ...

随机推荐

  1. Oracle DBA 的常用Unix参考手册(二)

    9.AIX下显示CPU数量    # lsdev -C|grep Process|wc -l10.Solaris下显示CPU数量# psrinfo -v|grep "Status of pr ...

  2. [Everyday Mathematics]20150131

    在 $\bbR^4$ 中定义如下有界区域 $\Omega$: $$\bex \Omega=\sed{(x,y,z,w)\in\bbR^4;\ |x|+|y|+\sqrt{z^2+w^2}\leq 1} ...

  3. [转]解决crystal report水晶报表在浏览器提示bobj未定义的错误

    网上的中文文章(比如这篇文章)都是写的部署到服务器后出现的问题,同时也指出要把crystal report的aspnet_client文件夹拷贝到对应项目的根目录里,这样就可以正常显示了,但是具体到我 ...

  4. DateTime日期计算

    //今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-1).ToShortDateStrin ...

  5. 10款jquery图片广告特效的预览及源码下载 改自[帅的相对论]

    原文格式有问题,我来排版了一下,分享给大家. 1.jQuery仿海尔官网全屏焦点图特效代码 Query仿海尔官网全屏焦点图特效代码,带有左右箭头的jQuery焦点图切换特效.当焦点图切换时,下方的三块 ...

  6. Echarts显示全球dns server物理位置

    今天YY给了我一大串dns server的ip,然后提出将这些ip物理位置显示在世界地图上(仅仅显示每个地区有几个dns server就好),苦逼了一下午,总算告一段落.把里面关键的点贴上来以后看.. ...

  7. 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point

    // 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point // 思路:直接暴力绝对T // 先确定x范围,每个x范围内,离圆心最远的点一定是y轴两端的点.枚举x的范围,再 ...

  8. 《APUE》中的函数整理

    第1章 unix基础知识 1. char *strerror(int errnum) 该函数将errnum(就是errno值)映射为一个出错信息字符串,返回该字符串指针.声明在string.h文件中. ...

  9. Maven管理多模块项目

    首先,我们要明确的多模块项目的含义,它是指一个应用中包含多个module.一般来说,一个应用单独部署成服务,只是打包的时候,maven会把各个module组合在一起.各模块一般单独打成jar放到lib ...

  10. CSS 去掉IE10中type=password中的眼睛图标

    在IE10中,input[type=password],如果我们输入内容后,内容会变成圆点,这与以前一样,但后面多了一个眼睛图标,我们鼠标移过去按下会出现输入内容.有时我们想去掉这功能.IE10允许我 ...