Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O editor é criado usando componentes do Managed Extensibility Framework (MEF). Você pode criar seus próprios componentes MEF para estender o editor, e seu código também pode consumir componentes do editor.
O MEF é uma biblioteca .NET que permite adicionar e modificar recursos de um aplicativo ou componente que segue o modelo de programação MEF. O editor do Visual Studio pode fornecer e consumir partes de componentes MEF.
O MEF está contido no assembly de System.ComponentModel.Composition.dll do .NET Framework versão 4.
Para obter mais informações sobre MEF, consulte Managed Extensibility Framework (MEF).
Componentes e recipientes de composição
Um componente é uma classe ou um membro de uma classe que pode realizar uma (ou ambas) das seguintes ações:
Consumir outro componente
Ser consumido por outro componente
Por exemplo, considere um aplicativo de compras que tenha um componente de entrada de pedido que depende dos dados de disponibilidade do produto fornecidos por um componente de estoque de depósito. Em termos de MEF, a parte de estoque pode exportar dados de disponibilidade do produto e a parte de entrada de pedido pode importar os dados. A parte de entrada de ordem e a parte de inventário não precisam se conhecer; O contêiner de composição (fornecido pelo aplicativo host) é responsável por manter o conjunto de exportações e resolver as exportações e importações.
O contêiner de composição, CompositionContainer, normalmente pertence ao host. O contêiner de composição mantém um catálogo de peças componentes exportadas.
Exportação e importação de componentes
Você pode exportar qualquer funcionalidade, desde que seja implementada como uma classe pública ou um membro público de uma classe (propriedade ou método). Não é necessário derivar a parte componente de ComposablePart. Em vez disso, você deve adicionar um ExportAttribute atributo à classe ou membro da classe que deseja exportar. Este atributo especifica o contrato pelo qual outra parte do componente 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 export usa um parâmetro que especifica o tipo de exportação.
[Export(typeof(ContentTypeDefinition))]
class TestContentTypeDefinition : ContentTypeDefinition { }
Por padrão, o ExportAttribute atributo define um contrato que é o tipo da classe de exportação.
[Export]
[Name("Structure")]
[Order(After = "Selection", Before = "Text")]
class TestAdornmentLayerDefinition : AdornmentLayerDefinition { }
No exemplo, o atributo padrão [Export] é equivalente 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;
Importar uma exportação MEF
Quando você deseja consumir uma exportação MEF, você deve saber o contrato (normalmente o tipo) pelo qual ele foi exportado e adicionar um ImportAttribute atributo que tenha esse valor. Por padrão, o atributo import usa um parâmetro, que é o tipo da classe que ele modifica. As seguintes linhas de código importam o IClassificationTypeRegistryService tipo.
[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;
Solução de problemas de importação/exportação: acessar o log de erros de composição do MEF
Você pode ter problemas se tentar importar algo que não existe na instalação atual do VS ou se você criar incorretamente sua importação ou exportação. A principal maneira de localizar e resolver esses problemas é fazer referência ao log de erros de composição do Managed Extensibility Framework (MEF), armazenado em %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.
Obtenha a funcionalidade do editor a partir de um componente MEF
Se o código existente for uma parte do componente MEF, você poderá usar metadados MEF para consumir partes do componente do editor.
Para consumir a funcionalidade do editor de uma parte do componente MEF
Adicione referências a System.Composition.ComponentModel.dll, que está no cache de assembly global (GAC) e aos assemblies do editor.
Adicione as diretivas de utilização pertinentes.
using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text;Adicione o
[Import]atributo à interface de serviço, da seguinte maneira.[Import] ITextBufferFactoryService textBufferService;Depois de obter o serviço, você pode consumir qualquer um de seus componentes.
Quando tiver compilado a sua montagem, coloque-a no *.. \Common7\IDE\Components* pasta da sua instalação do Visual Studio.