异度部落格

学习是一种生活态度。

0%

【资料整理】MEF

什么是 MEF?

Managed Extensibility Framework(MEF)可以很容易的构造可扩展性的应用程序。MEF 提供了发现和组合能力,因此你可以选择来加载插件。

MEF 解决了什么问题?

  • MEF 赠送了一种简单的在运行时扩展问题。直到现在,任何程序你想支持插件模式,需要构建自己的架构。这些插件经常是特定应用的并且不能被多种实现重用的。
  • MEF 提供一个标准方式来让程序暴露自己,消耗外部扩展。扩展,天生的,能被不同的程序重用。然而,一个扩展需要实现特定应用。扩展可以依赖另一个扩展,MEF 确保它们以正确的顺序同时被装配。
  • MEF 允许在查询和筛选中使用额外的元数据来标记扩展。

MEF 如何工作?

  • 粗略的说,MEF 的核心由一个 catalog(目录)和一个 CompositionContainer 组成。一个 catalog 负责查找扩展,container 负责协调创建和符合的依赖。
  • MEF 第一个类是 ComposablePart。一个 Composable part 提供了一个或多个 Exports,也可以依赖于一个或多个由 Imports 提供的扩展。一个 composable part 也管理可以是 object 或给定类型的实例。MEF,然而,是一个可扩展的,额外的 ComposablePart 实现,它依附于 Import/Export 契约。
  • Exports 和 Imports 每个都有一个契约(Contract)。契约(Contract)是 exports 和 Imports 之间的桥梁。一个 export 契约由用来过滤的元数据组成。例如,它可以指定一个 export 提供的指定能力。
  • MEF 的容器和 Catalogs 交互来访问 composable parts。容器自己解决一部分依赖并暴露 Exports 给外界。如果你愿意,你可以自由去增加 composable part 的实例。
  • 一个 ComposablePart 返回一个 catalog,它在你的程序中很像一个扩展。它有宿主程序提供的 Imports,然后 Export 其他。
  • 默认 MEF composable part 实现使用 attribute 元数据来声明 exports 和 imports。这允许 MEF 来决定哪个 parts, imports 和 exports 是完全可用的。