Compartilhar via


Estrutura de extensibilidade gerenciada no Editor

O editor está embutido, usando componentes Managed Extensibility Framework (MEF). Você pode criar seus próprios componentes MEF para estender o editor, e o seu código pode consumir componentes do editor também.

Visão geral da estrutura de extensibilidade gerenciada

O MEF é um.NET que permite adicionar e modificar recursos de um aplicativo ou componente que segue o modelo de programação MEF. O editor de Visual Studio pode fornecer tanto consumir partes do componente MEF.

O MEF está contido na.Assembly de System.ComponentModel.Composition.dll do NET Framework versão 4.

Para obter mais informações sobre o MEF, consulte Managed Extensibility Framework (MEF).

Partes do componente e recipientes de composição

Uma parte de componente é uma classe ou membro de uma classe que pode fazer uma (ou ambas) das seguintes opções:

  • Consumir o outro componente

  • Ser consumido por outro componente

Por exemplo, considere um aplicativo de compra que possui um componente de entrada de ordem que varia de acordo com os dados de disponibilidade do produto fornecidos por um componente de estoque do depósito. Em termos MEF, a parte do estoque pode Exportar dados de disponibilidade do produto e a lata de parte de entrada de pedido Importar os dados. A parte de entrada de ordem e a parte do estoque não precisam saber sobre si; o o recipiente de composição (fornecido pelo aplicativo host) é responsável por manter o conjunto de exportações e resolvendo as exportações e importa.

O contêiner de composição, CompositionContainer, geralmente é de propriedade pelo host. O recipiente de composição mantém um catálogo componentes exportado.

Exportando e importando as partes do componente

Você pode exportar qualquer funcionalidade, contanto que ele é implementado como uma classe pública ou um membro público de uma classe (propriedade ou método). Não é necessário derivar de sua parte do componente de ComposablePart. Em vez disso, você deve adicionar um ExportAttribute de atributo para a classe ou membro da classe que você deseja exportar. Este atributo especifica o contrato pelo qual componente a outra parte pode importar sua funcionalidade.

O contrato de exportação

O ExportAttribute define a entidade (classe, interface ou estrutura) que está sendo exportada. Normalmente, o atributo de exportação tem um parâmetro que especifica o tipo da exportação.

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

Por padrão, o ExportAttribute atributo define um contrato que é o tipo da classe exportação.

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

No exemplo, o padrão [Export] atributo equivale a [Export(typeof(TestAdornmentLayerDefinition))].

Você também pode exportar uma propriedade ou método, conforme mostrado no exemplo a seguir.

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

Importando uma exportação MEF

Quando você deseja consumir uma exportação MEF, você deve saber o contrato (geralmente o tipo) pelo qual ele foi exportado e adicionar um ImportAttribute atributo que possui esse valor. Por padrão, o atributo de importação leva um parâmetro, que é o tipo da classe que ele modifica. As seguintes linhas de importação do código do IClassificationTypeRegistryService tipo.

[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;

Obtendo a funcionalidade do Editor de uma parte de componente MEF

Se seu código existente é uma parte de componente MEF, você pode usar metadados MEF consumir partes de componente do editor.

Para consumir a funcionalidade do editor de uma parte do componente MEF

  1. Adicione referências para System.Composition.ComponentModel.dll, que está no cache global de assemblies (GAC), e os assemblies do editor.

  2. Adicionar o relevantes usando as instruções.

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text;
    
  3. Adicionar o [Import] de atributo à sua interface de serviço, como a seguir.

    [Import]
    ITextBufferFactoryService textBufferService;
    
  4. Quando você tiver obtido o serviço, você pode consumir qualquer um dos seus componentes.

  5. Quando você tiver compilado o seu assembly, colocá-lo na.. A pasta \Common7\IDE\Components\ da instalação do Visual Studio.

Consulte também

Conceitos

Pontos de extensão do Editor