MEF初体验之九:部件生命周期】的更多相关文章

理解MEF容器中部件的生命周期及其含义是非常重要的.鉴于MEF重点在开放端应用程序,这将变得尤其重要的,一旦app ships和第三方扩展开始运行,作为应用程序的开发者将很好地控制这一系列的部件.生命周期可以被解释为这样一个部件期望的共享物,无论是一个新的部件被创建还是一个部件被关闭或释放都由控制策略来翻译. Shared, Non Shared and ownership 通过使用PartCreationPolicyAttribute特性设置CreationPolicy(类级别)来定义一个部件…
理解 MEF 容器部件生命周期和实现是非常重要的事情.考虑到 MEF 关注可扩展应用程序.这变得尤为重要.生命期可以解释为期望部件的共享性(transitively, its exports)   共享,非共享与所有权(Share,Non Shared and ownership)   部件的共享性(Shareability)是通过使用 PartCreationPolicyAttribute 定义的.PartCreationPolicyAttribute 提供以下几种值:   Shared:部件…
组合部件 在MEF中,一个组合部件就是一个组合单元,组合部件"出口"其它组合部件需要的服务并且从其它部件"进口"需要的服务.在MEF编程模型中,为了声明组合部件的"出口"和"进口",使用的是ExportAttribute和ImportAttribute.一个组合部件至少应该包含一个[Export].组合部件既可以被显式的添加到Container,也可以通过使用Catalogs来创建.MEF附带的默认的Catalogs是通过[E…
查询组合容器 组合容器暴露了几个get exports的重载方法和导出对象和对象集合.你需要注意下面的行为: 当请求单个对象实例时,如果未发现导出,一个异常将被抛出 当请求单个对象实例时,如果发现超过一个,一个异常将被抛出 GetExportedValue方法 在下面的代码片段中,我们请求一个Root(契约)实例的对象 var container = new CompositionContainer(new AssemblyCatalog(typeof(Program).Assembly));…
组合部件通过[ExportAttribute]声明exports.在MEF中,有这么几种成员可声明exports的方式:组合部件(类).字段.属性和方法.我们来看下ExportAttribute类的声明: [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method | AttributeTargets.Class, AllowMultiple=true, Inherite…
简介 Angular 指令的生命周期,它是用来记录指令从创建.应用及销毁的过程.Angular 提供了一系列与指令生命周期相关的钩子,便于我们监控指令生命周期的变化,并执行相关的操作.Angular 中所有的钩子如下图所示: 分类 指令与组件共有的钩子 ngOnChanges ngOnInit ngDoCheck ngOnDestroy 组件特有的钩子 ngAfterContentInit ngAfterContentChecked ngAfterViewInit ngAfterViewChec…
一些应用程序被设计成在运行时可以动态改变.例如,一个新的扩展被下载,或者因为其它的多种多样的原因其它的扩展变得不可用.MEF处理这些多样的场景是依赖我们称作重组的功能来实现的,它可已在最初的组合后改变导入的值. 导入可以通知MEF它通过[Import]使用Allowrecomposition属性来支持重组.看下面的代码片段: [Export] public class HttpServerHealthMonitor { [ImportMany(AllowRecomposition=true)]…
一个MEF容器实例是不可变的.如果catalog支持改变(像观察一个目录的改变)或是如果你的代码在运行时添加或移除部件,改变都可能发生.以前,你不得不作出改变并在组合容器上调用它的组合方法.在Preview 4 版中,我们已经介绍了对Composition Batch的支持. 批处理包含了一系列要添加或移除的部件.变化执行后,容器将自动地触发重合,这将更新受变化影响的可重组导入.考虑这样一个场景,一个设置窗口和一个用户选择和取消选择项.这些将导致映射到当前容器中部件与否.为了应用batch,你将…
当在使用子容器的时候,基于某些具体标准来过滤目录可能是重要的.例如,基于部件的创建策略来过滤是很常见的.下面的代码片段演示了如何构建这种特别方法: var catalog = new AssemblyCatalog(typeof(Program).Assembly); var parent = new CompositionContainer(catalog); var filteredCat = new FilteredCatalog(catalog, def => def.Metadata.…
MEF特性化编程模型的价值主张之一是通过catalogs动态发现部件的能力.Catalogs允许应用程序很容易地消费那些通过[Export]已经自我注册的exports. Assembly Catalog 为了在一个特定的程序集中发现所有的exports,可以使用System.ComponentModel.Composition.Hosting.AssemblyCatalog类. var catalog = new AssemblyCatalog(System.Reflection.Assemb…