MEF 编程指南(七):使用目录
2014-04-22 14:36
393 查看
目录(Catalogs)
MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力。目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出。下面列出 MEF 提供的目录。
程序集目录(Assembly Catalog)
为了发现给定程序集所有导出,需要使用 [System.ComponentModel.Composition.Hosting.AssemblyCatalog]。
文件目录(Directory Catalog)
为了发现目录中所有程序集的所有导出,需要使用 [System.ComponentModel.Composition.Hosting.DirectoryCatalog]。
如果使用相对目录,这就相对于当前 AppDomain 的根目录。
DirectoryCatalog 会一次性扫描目录,但是在目录有变动时候不会自动刷新。然而,你可以实现自己的扫描机制,调用 Catalog 的 Refresh() 方法进行扫描。一旦重新扫描(Rescans),重组(Recomposition)就会发生。
注意:Silverlight 不支持 DirectoryCatalog。
聚集目录(Aggregate Catalog)
当程序集目录和文件目录不能独自地满足要求或者是需要合并目录,需要使用 [System.ComponentModel.Composition.Hosting.AggregateCatalog]。AggregateCatalog 组合多个目录到单一的目录。一种常见的模式是:不仅添加当前执行的程序集,而且添加三方扩展的文件目录。你可以传递 Catalogs 集合到 AggregateCatalog 构造器,或者直接添加 Catalogs 集合,例如:catalog.Catalogs.Add(...)
类型目录(Type Catalog)
为了发现特定类型集合的所有导出,使用 [System.ComponentModel.Composition.Hosting.TypeCatalog]。
发布目录(DeploymentCatalog) - 适用于 Silverlight
Sliverlight 中的 MEF 包含 DeploymentCatalog 用于动态地下载远程的 XAPs。更多参考 DeploymentCatalog 章节。
为容器(Container)使用目录(Catalog)
为容器使用目录,简单地把目录传递给容器的构造器。
原文:
http://mef.codeplex.com/wikipage?title=Using%20Catalogs&referringTitle=Guide
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);
原文:
http://mef.codeplex.com/wikipage?title=Using%20Catalogs&referringTitle=Guide
相关文章推荐
- 使用QTextEdit实现状态信息显示框
- spring MVC笔记4——文件上传
- C语言函数sscanf()的用法
- java hibernate 将图片存入数据库,并从数据库取出显示在网页上
- JAVA设计模式---模版模式
- C/C++日常学习总结(第一篇)const用法及printf的执行顺序
- 2014微软编程之美初赛第一场第二题 树
- 编程杂项
- wxPython 2.6.2.1在 redhat上 安装
- asp.net mvc中 提到文本信息不解码问题
- spring下配置dbcp,c3p0,proxool[转]
- Method 'GetStringUTFChars' could not be resolved
- Qt中的treeWidget使用
- 快速将wax配置到项目中进行lua开发
- 一般报java.lang.NullPointerException的原因有以下几种
- 在C#应用程序中,对comboBox这个控件的一些基本用法
- eclipse中部署maven的错误(一)
- 《Head First Programming》---python 2_文本数据
- Eclipse开发Android程序在安卓手机上调试,不用AVD
- Java中正则表达式的使用