摘要: 由于部件承载于组合容器中,因此其生命周期可能比普通对象更复杂。 部件可实现两个重要的生命周期相关接口:IDisposable 和 IPartImportsSatisfiedNotification。需要在关闭时执行工作的部件和需要释放资源的部件应照常为 .NET Framework 对象实现 IDisposable。 但是,由于容器创建并维护对部件的引用,因此只有拥有部件的容器才应对其调用 Dispose 方法。 容器本身实现 IDisposable,并且作为 Dispose 中其清理的一部分,它将对拥有的所有部件调用 Dispose。 因此,当不再需要组合容器及其拥有的任何部件时,您应始终释 阅读全文
posted @ 2013-06-09 17:06 一个人在北京 阅读(1435) 评论(0) 推荐(1) 编辑
摘要: 在某些情况下,您可能需要防止部件作为目录的一部分被发现。 例如,部件可能是应从中继承(而不是使用)的基类。 可通过两种方式来实现此目的。 首先,可以对部件类使用 abstract 关键字。 尽管抽象类能够向派生自抽象类的类提供继承的导出,但抽象类从不提供导出。如果无法使类成为抽象类,您可以使用 PartNotDiscoverable 特性来修饰它。 用此特性修饰的部件将不会包括在任何目录中。 下面的示例演示这些模式。 DataOne 将被目录发现。 由于 DataTwo 是抽象的,因此它将不会被发现。 由于 DataThree 使用了 PartNotDiscoverable 特性,因此它将不会 阅读全文
posted @ 2013-06-09 17:02 一个人在北京 阅读(851) 评论(0) 推荐(0) 编辑
摘要: 当部件指定执行导入和组合时,组合容器将尝试查找匹配的导出。 如果它将导入与导出成功匹配,则导入成员将设置为导出的对象的实例。 导出部件的创建策略控制此实例来源于何处。两个可能的创建策略为:“共享”和“非共享”。 在具有该协定的部件的容器中,创建策略为“共享”的部件将在每个导入之间共享。 当组合引擎找到匹配项并且必须设置导入属性时,它只有在部件尚不存在时才会实例化部件的新副本;否则它将提供现有副本。 这意味着许多对象可能会引用相同部件。 此类部件不应依赖于可能会从许多地方更改的内部状态。 此策略适用于静态部件、提供服务的部件,以及消耗大量内存或其他资源的部件。在每次找到部件的其中一个导出的匹配导 阅读全文
posted @ 2013-06-09 16:59 一个人在北京 阅读(2112) 评论(0) 推荐(0) 编辑