随笔分类 - MEF 编程指南
摘要:MEF 容器实例并非不可变的。如果目录支持改变(像监控目录变动)或者在运行时添加/移除部件都可能发生改变。以前,你不得不做出改动并且调用 CompositionContainer 上的 Compose 方法。在 Preview 4 release上,我们已经介绍对批量组合的支持。批处理包含一系列添加...
阅读全文
摘要:CompositionContainer 公开了一部分获取导出、导出对象以及两者集合的重载。 在这些方法重载中,你应该遵循下面的共享行为准则 - 除非特别说明。 当请求单一实例的时候,如果没发现任何导入,将会抛出异常。 当请求单一实例的时候,如果发现不止一个导入,将会抛出异常。 ...
阅读全文
摘要:有些应用程序被设计成在运行时动态地改变。例如,一个新的扩展可能被下载,或者其他原因变得不可用。MEF 依靠我们称之为重组(Composition)的技术处理,在初始化组合以后改变导入值的场景。导入可以通过 [System.ComponentModel.Composition.ImportAttrib...
阅读全文
摘要:理解 MEF 容器部件生命周期和实现是非常重要的事情。考虑到 MEF 关注可扩展应用程序。这变得尤为重要。生命期可以解释为期望部件的共享性(transitively, its exports) 共享,非共享与所有权(Share,Non Shared and ownership) 部件的共享...
阅读全文
摘要:当使用子容器的时候,基于特定的标准(Specific Criteria)过滤目录是很必要的。比如,基于部件构造策略的过滤器是很常见的。下面的代码片段演示了如何构建的特殊途径(Particular Approach): var catalog = new AssemblyCatalog(typeof(...
阅读全文
摘要:目录(Catalogs)MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力。目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出。下面列出 MEF 提供的目录。程序集目录(Assembly Catalog)为了发现给定程序集所有导出,需要使用 [Syst...
阅读全文
摘要:声明导出解释了部件导出服务的基础知识和价值观(Values)。有时候出于种种原因,导出关联信息是非常必要的。通常,用于解释关于功能公共契约的具体实现。允许导入满足约束要求的导出,或者导入所有可用的实现并且在导出前在运行时检查他们的功能。为导出附加元数据(Attaching Metadata to a...
阅读全文
摘要:在组合部件的时候,导入将会触发部件(部件集合)的实例化,为原始的请求部件公开必要的导出需求。对于有些应用程序,推迟实例化 - 并且防止递归组合图(Recursive Composition Down The Graph) - 因为创建长而复杂的对象图(Graph Of Object)的花费是昂贵和不...
阅读全文
摘要:组合部件通过 [System.ComponentModel.Composition.ImportAttribute] 特性声明导入。类似于导出,也有几种不同的方法声明导入,即通过:字段(Fields)、属性(Properties)和构造器参数(Constructor Parameters)。 ...
阅读全文
摘要:组合部件通过[System.ComponentModel.Composition.ExportAttribute] 特性声明导出。MEF 有几种不同的方式声明导出,包括在部件层面(Part Level),通过属性(Properties)和方法(Method)声明导出。 组合部件导出(Comp...
阅读全文
摘要:可组合部件(Composable Parts)在 MEF 内部可组合部件是一个可组合单元。可组合部件导出其他可组合部件需要的服务,并且从其他可组合部件导入服务。在 MEF 编程模型中,可组合部件用 [System.ComponentModel.Composition.Import] 和 [Syste...
阅读全文
摘要:在应用程序中托管(Hosing) MEF 涉及到创建组合容器(CompositionContainer) 实例,添加可组合部件(Composable Parts),包括应用程序宿主(Host)本身并进行组合(Composing)。下面是托管涉及的步骤。1.创建宿主(Host)类。下面的例子我们使用控...
阅读全文