MEF 编程指南(五):延迟导出】的更多相关文章

在组合部件的时候,导入将会触发部件(部件集合)的实例化,为原始的请求部件公开必要的导出需求.对于有些应用程序,推迟实例化 - 并且防止递归组合图(Recursive Composition Down The Graph) - 因为创建长而复杂的对象图(Graph Of Object)的花费是昂贵和不必要的,这可能作为一个重要因素来考虑.   这是 MEF 支持延迟导出的动机.为了使用延迟导出,所有需要做的事情是使用导入 [System.Lazy<T>] 直接替换导入 [T] .如下例代码片段:…
理解 MEF 容器部件生命周期和实现是非常重要的事情.考虑到 MEF 关注可扩展应用程序.这变得尤为重要.生命期可以解释为期望部件的共享性(transitively, its exports)   共享,非共享与所有权(Share,Non Shared and ownership)   部件的共享性(Shareability)是通过使用 PartCreationPolicyAttribute 定义的.PartCreationPolicyAttribute 提供以下几种值:   Shared:部件…
可组合部件(Composable Parts)   在 MEF 内部可组合部件是一个可组合单元.可组合部件导出其他可组合部件需要的服务,并且从其他可组合部件导入服务.在 MEF 编程模型中,可组合部件用 [System.ComponentModel.Composition.Import] 和 [System.ComponentModel.Composition.Export] 特性标识,以便声明导出点和导入点.可组合部件应该包含至少一个导出点.可组合部件要么显式添加到容器或者通过使用目录创建.M…
声明导出解释了部件导出服务的基础知识和价值观(Values).有时候出于种种原因,导出关联信息是非常必要的.通常,用于解释关于功能公共契约的具体实现.允许导入满足约束要求的导出,或者导入所有可用的实现并且在导出前在运行时检查他们的功能.   为导出附加元数据(Attaching Metadata to an Export)   考虑到 IMessageSender 服务更早引入.假设我们有一些实现,和相关的消费者实现(Consumer Of The Implementations)有差异.对于我…
组合部件通过 [System.ComponentModel.Composition.ExportAttribute] 特性声明导出.MEF 有几种不同的方式声明导出,包括在部件层面(Part Level),通过属性(Properties)和方法(Method)声明导出.     组合部件导出(Composable Part Exports)     当组合部件需要导出自身时候使用组合部件层面导出.为了组合部件导出自身,如下例代码所示,仅仅利用 [System.ComponentModel.Com…
MEF中使用导出与导入,实质上就是对一个对象的实例化的过程,通过MEF的特性降低了对象的直接依赖,从而让系统的设计达到一种高灵活.高扩展性的效果.在具体的设计开发中,存在着某些对象是不需要在系统运行或者的附属对象初始化的时候进行实例化的,仅仅只需要在需要使用到他的时候才会进行实例化,从系统的上来说这也是提高系统性能的一种可行的实现方式,这种方式就可以理解为对象的迟延初始化,或者叫迟延加载.MEF也对此使用场景提供了完善的实现机制,下面来看看在MEF中的迟延初始化是如何使用的. namespace…
CompositionContainer 公开了一部分获取导出.导出对象以及两者集合的重载.   在这些方法重载中,你应该遵循下面的共享行为准则 - 除非特别说明.   当请求单一实例的时候,如果没发现任何导入,将会抛出异常. 当请求单一实例的时候,如果发现不止一个导入,将会抛出异常.   GetExportedValue   在下面的代码片段里,我们请求 Root(契约)实例的实例.   var container = new CompositionContainer(new Assembly…
目录(Catalogs)   MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力.目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出.下面列出 MEF 提供的目录.      程序集目录(Assembly Catalog)   为了发现给定程序集所有导出,需要使用 [System.ComponentModel.Composition.Hosting.AssemblyCatalog].   var catalog = new AssemblyCata…
MEF 容器实例并非不可变的.如果目录支持改变(像监控目录变动)或者在运行时添加/移除部件都可能发生改变.以前,你不得不做出改动并且调用 CompositionContainer 上的 Compose 方法.在 Preview 4 release上,我们已经介绍对批量组合的支持.   批处理包含一系列添加或移除的部件.在执行更改之后,容器自动地触发一次更新重组导入导致的变化的组合. 设想一个设置窗口的场景,用户选中或者取消选中一个选项.那些会映射当前的部件或者不在容器中的部件.请求批处理,你将会…
组合部件通过 [System.ComponentModel.Composition.ImportAttribute] 特性声明导入.类似于导出,也有几种不同的方法声明导入,即通过:字段(Fields).属性(Properties)和构造器参数(Constructor Parameters).     属性导入(Property Imports)     为了向属性导入值,使用 [System.ComponentModel.Composion.ImportAttribute] 特性标识.如下例中导…
在应用程序中托管(Hosing) MEF 涉及到创建组合容器(CompositionContainer) 实例,添加可组合部件(Composable Parts),包括应用程序宿主(Host)本身并进行组合(Composing).   下面是托管涉及的步骤.   1.创建宿主(Host)类.下面的例子我们使用控制台应用程序,宿主(Host)类即 Program 类. 2.添加 System.ComponentModel.Composition 程序集引用. 3.添加以下 using 语句:usi…
  Animations Animations provide fluid visual transitions between different states of your user interface. In iOS, animations are used extensively to reposition views, change their size, remove them from view hierarchies, and hide them. You might use…
有些应用程序被设计成在运行时动态地改变.例如,一个新的扩展可能被下载,或者其他原因变得不可用.MEF 依靠我们称之为重组(Composition)的技术处理,在初始化组合以后改变导入值的场景.   导入可以通过 [System.ComponentModel.Composition.ImportAttribute] 使用 Allowrecompostion 属性通知 MEF 支持重组.参考下面的代码:   [Export] public class HttpServerHealthMonitor…
当使用子容器的时候,基于特定的标准(Specific Criteria)过滤目录是很必要的.比如,基于部件构造策略的过滤器是很常见的.下面的代码片段演示了如何构建的特殊途径(Particular Approach):   var catalog = new AssemblyCatalog(typeof(Program).Assembly); var parent = new CompositionContainer(catalog); var filteredCat = new Filtered…
C# 3.0就引入的新特性,扩展方法可以很大的增加你代码的优美度,扩展方法提供你扩展.NET Framewoke类的扩展途径,书写和规则也简单的要命. 编写扩展方法有下面几个要求: 第一:扩展方法所在的类必须是全局的,不能是内部嵌套类. 第二:扩展方法的类是静态类. 第三:扩展方法是静态方法. 第四:扩展方法的第一个参数的数据类型必须是要扩展类型. 第五:扩展方法的第一个参数使用this关键字. 下面是一段很简单的代码: 1 using System; 2  using System.Colle…
第5章 原型 5.1 原型属性 function f(a,b){ return a*b; }; // length 属性 f.length; // constructor 构造属性 f.constructor; // function Function() { [native code] } // prototype 属性 初始值是空对象 typeof f.prototype; //"object" 5.1.1 利用原型添加方法和属性 function f1(name,color){…
<MEF程序设计指南>博文汇总 在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Framework 自身内部包含组件模型和 System.Addin.同时存在若干种开源解决方案,包括 SharpDevelop 的 SODA 体系结构和"控制反转"容器(如 Castle Windsor.Structure Map.Spring.Net 以及Unity). 虽然.NET平台下…
http://www.cnblogs.com/beniao/archive/2010/08/11/1797537.html 在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Framework 自身内部包含组件模型和 System.Addin.同时存在若干种开源解决方案,包括 SharpDevelop 的 SODA 体系结构和“控制反转”容器(如 Castle Windsor.Structure…
在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Framework 自身内部包含组件模型和 System.Addin.同时存在若干种开源解决方案,包括 SharpDevelop 的 SODA 体系结构和“控制反转”容器(如 Castle Windsor.Structure Map.Spring.Net 以及Unity). 虽然.NET平台下,包括MS在内的各种方案已经遍地开花,但是MEF是第一…
<MEF程序设计指南>博文汇总 在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Framework 自身内部包含组件模型和 System.Addin.同时存在若干种开源解决方案,包括 SharpDevelop 的 SODA 体系结构和“控制反转”容器(如 Castle Windsor.Structure Map.Spring.Net 以及Unity). 虽然.NET平台下,包括MS在内的各种…
在MEF中,使用[System.ComponentModel.Composition.ExportAttribute]支持多种级别的导出部件配置,包括类.字段.属性以及方法级别的导出部件,通过查看ExportAttribute的源代码就知道ExportAttribute被定义为Attribute,并为其设置了使用范围.   [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA…
原文:http://www.dreamingwish.com/article/ios-multi-threaded-programming-a-multi-threaded-programming.html 第一章      关于多线程编程 多年来,计算机的最大性能主要受限于它的中心微处理器的速度.然而由于个别处理器已经开始达到它的瓶颈限制,芯片制造商开始转向多核设计,让计算机具有了同时执行多个任务的能力.尽管Mac OS X利用了这些核心优势,在任何时候可以执行系统相关的任务,但自己的应用程序…
Flink 的流数据 API 编程指南 Flink 的流数据处理程序是常规的程序 ,通过再流数据上,实现了各种转换 (比如 过滤, 更新中间状态, 定义窗口, 聚合).流数据可以来之多种数据源 (比如, 消息队列, socket 流, 文件). 通过sink组件落地流计算的最终结果,比如可以把数据落地文件系统,标准输出流比如命令行界面, Flink 的程序可以运行在多种上下文环境 ,可以单独只是Flink api,也可以嵌入其他程序. execution可以运行在本地的 JVM里, 也可以 运行…
Posix线程编程指南 Posix线程编程指南... 1 一线程创建与取消... 2 线程创建... 2 1.线程与进程... 2 2. 创建线程... 2 3. 线程创建属性... 2 4. 创建的Linux实现... 3 线程取消... 3 1. 消的定义... 3 2. 线程取消的语义... 4 3. 取消点... 4 4. 程序设计方面的考虑... 4 5. 与线程取消相关的pthread函数... 4 二线程私有数据... 5 1. 概念及作用... 5 2. 创建和注销... 5 3…
OpenGL编程指南(第七版) 转自:http://blog.csdn.net/w540982016044/article/details/21287645 在接触OpenGL中,配置显得相当麻烦,特别是在VS2012下配置时,存在许多问题,而网上的很多方法仅仅适用于VS2008,甚至仅适用于VC6.0,笔者经过自身的实践,参考了许多网上的资料,总结了一下配置的方法,当然这仅仅是笔者的个人理解,笔者个人水平有限,因此未必是万能的,如果解说存在错误或者不明白的地方,还望读者原谅和更正,谢谢. 一.…
推荐-高质量C++/C编程指南(林锐) 版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐   2001-7-1至 2001-7-18 林锐起草 V 1.0 正式文件 林锐   2001-7-18至 2001-7-24 朱洪海审查V 0.9, 林锐修正草稿中的错误                     目录 前言... 6 第1章文件结构... 11 1.1 版权和版本的声明... 11 1.2 头文件的结构... 12 1.3 定义文件的结构... 13 1.4 头文件的作…
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用的基本已经讲完了,相信大家已经能看出MEF所带来的便利了.今天就介绍一些MEF中一些较为不常用的东西,也就是大家口中的所谓的比较高级的用法. 前面讲的导出都是在每个类上面添加Export注解,实现导出的,那么有没有一种比较简便的方法呢?答案是有的,就是在接口上面写注解,这样只要实现了这个接口的类都会…
本文是<Core Animation Programming Guide>2013-01-28更新版本的译文.本文略去了原文中关于OS X平台上Core Animation相关内容.因为原文的类型属于编程指南,所以示例代码并不多,更多的是理论层面的探讨.所以译文中加入了大量的示例代码,以提高本文的可操作性.希望本文能够对你有所帮助. 本文由海水的味道翻译,转载请注明译者和出处,请勿用于商业用途! 关于Core Animation Core Animation是iOS与OS X平台上负责图形渲染…
Linux音频编程指南 虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序,同时还给出了一些常用的音频编程框架. 一.数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才能送到计算机中作进一步的处理. 数字音频系统通过将声波的波型转换成一系列二进制数据,来实现对原始声音的重…
Spark结构式流编程指南 概览 Structured Streaming 是一个可拓展,容错的,基于Spark SQL执行引擎的流处理引擎.使用小量的静态数据模拟流处理.伴随流数据的到来,Spark SQL引擎会逐渐连续处理数据并且更新结果到最终的Table中.你可以在Spark SQL上引擎上使用DataSet/DataFrame API处理流数据的聚集,事件窗口,和流与批次的连接操作等.最后Structured Streaming 系统快速,稳定,端到端的恰好一次保证,支持容错的处理. 小…