在编辑器中 managed extensibility framework

使用 managed extensibility framework 元素时,编辑器编译 (MEF)。 可以生成拥有 MEF 组件扩展编辑器,因此,代码可以使用编辑元素。

managed extensibility framework 概述

MEF 是可以添加和修改应用程序或组件功能遵循 MEF 编程模型的 .NET 库。 Visual Studio 编辑器可以提供和使用 MEF 组件。

MEF 在 .NET framework 4 版 System.ComponentModel.Composition.dll 程序集包含。

有关 MEF 的更多信息,请参见 Managed Extensibility Framework (MEF)

组成部分和组合容器

组成部分是类或能执行某个类的成员 (或两者) 的如下:

  • 使用另一个组件

  • 通过另一个组件使用

例如,假设有一个订单输入元素取决于仓库库存组件提供的产品可用性数据的一个购物应用程序。 使用 MEF 术语,股票部件可 导出 产品可用性数据,并且,订单录入部件可 导入 数据。 订单录入部件和库存部件不必知道彼此; 组合容器 (由提供宿主应用程序) 若要维护一组导出和解决导出和导入负责。

组合容器, CompositionContainer,由宿主通常拥有。 组合容器维护导出的组成部分的内容。

导出和导入组成部分

可以导出所有功能,,只要它实现为公共类或类的公共成员 (属性或方法)。 您不必从 ComposablePart派生组件。 相反,您必须添加 ExportAttribute 属性设置为要导出的类或类成员。 此特性指定另一个组件部件可以导入函数的 协定 。

导出协定

ExportAttribute 定义导出的实体 (类、接口或结构)。 通常,导出特性带有指定导出的类型的参数。

[Export(typeof(ContentTypeDefinition))]
class TestContentTypeDefinition : ContentTypeDefinition {   }

默认情况下, ExportAttribute 属性定义为导出类的类型的协定。

[Export]
[Name("Structure")]
[Order(After = "Selection", Before = "Text")]
class TestAdornmentLayerDefinition : AdornmentLayerDefinition {   }

在此示例中,默认 [Export] 属性与 [Export(typeof(TestAdornmentLayerDefinition))]等效。

如下面的示例所示,可以导出属性或方法,。

[Export]
[Name("Scarlet")]
[Order(After = "Selection", Before = "Text")]
public AdornmentLayerDefinition scarletLayerDefinition;

导入 MEF 导出

如果要使用 MEF 导出时,必须知道该协定 (通常为类型) 该导出和添加对该值的 ImportAttribute 属性。 默认情况下,导入属性采用一个参数,是类的类型将修改。 下面的代码行导入 IClassificationTypeRegistryService 类型。

[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;

获取编辑器功能从 MEF 组件部件

如果现有的代码是 MEF 组件部分,您可以使用 MEF 元数据使用编辑器组件部件。

使用来自 MEF 组件部件的编辑功能

  1. 添加对 System.Composition.ComponentModel.dll,在全局程序集缓存 (GAC)并编辑程序集。

  2. 使用语句,添加相关。

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text;
    
  3. 添加 [Import] 属性设置为服务接口,如下所示。

    [Import]
    ITextBufferFactoryService textBufferService;
    
  4. 当您已获取服务时,可以使用它的任何一个元素。

  5. 在已编译程序集时,请将代码置于。 \Common7\IDE\Components\ folder of your Visual Studio 安装。

请参见

概念

编辑扩展点