Managed Extensibility Framework dans l’éditeurManaged Extensibility Framework in the editor

L’éditeur est généré à l’aide des composants de Managed Extensibility Framework (MEF).The editor is built by using Managed Extensibility Framework (MEF) components. Vous pouvez créer vos propres composants MEF pour étendre l’éditeur, et votre code peut consommer des composants de l’éditeur ainsi.You can build your own MEF components to extend the editor, and your code can consume editor components as well.

Vue d’ensemble de Managed Extensibility FrameworkOverview of the Managed Extensibility Framework

MEF est une bibliothèque .NET qui vous permet d’ajouter et modifier les fonctionnalités d’une application ou un composant qui suit le modèle de programmation MEF.The MEF is a .NET library that lets you add and modify features of an application or component that follows the MEF programming model. L’éditeur Visual Studio peut fournir et consommer des composants MEF.The Visual Studio editor can both provide and consume MEF component parts.

MEF est contenu dans le .NET Framework version 4 System.ComponentModel.Composition.dll assembly.The MEF is contained in the .NET Framework version 4 System.ComponentModel.Composition.dll assembly.

Pour plus d’informations sur MEF, consultez Managed Extensibility Framework (MEF).For more information about MEF, see Managed Extensibility Framework (MEF).

Composants et conteneurs de compositionComponent parts and composition containers

Un composant est une classe ou un membre d’une classe qui peut effectuer une des opérations suivantes (ou les deux) :A component part is a class or a member of a class that can do one (or both) of the following:

  • Utiliser un autre composantConsume another component

  • Être consommé par un autre composantBe consumed by another component

    Par exemple, considérez une application d’achat qui a un composant d’entrée de commande qui dépend des données de disponibilité de produit fournies par un composant de stock d’entrepôt.For example, consider a shopping application that has an order entry component that depends on product availability data provided by a warehouse inventory component. En termes MEF, la partie de l’inventaire peut exporter les données de disponibilité de produit et le peut de partie commande entrée importer les données.In MEF terms, the inventory part can export product availability data, and the order entry part can import the data. La partie entrée de commande et la partie de l’inventaire n’ont pas à connaître sur les autres ; le conteneur de composition (fourni par l’application hôte) est responsable en conservant le jeu d’exportations et la résolution des exportations et importations.The order entry part and the inventory part do not have to know about each other; the composition container (provided by the host application) is responsible for maintaining the set of exports, and resolving the exports and imports.

    Le conteneur de composition, CompositionContainer, est généralement détenus par l’hôte.The composition container, CompositionContainer, is typically owned by the host. Le conteneur de composition conserve un catalogue composants exporté.The composition container maintains a catalog of exported component parts.

Exporter et importer des composantsExport and import component parts

Vous pouvez exporter toutes les fonctionnalités, tant qu’elle est implémentée comme une classe publique ou un membre public d’une classe (propriété ou méthode).You can export any functionality, as long as it is implemented as a public class or a public member of a class (property or method). Vous n’êtes pas obligé de dériver votre composant à partir de ComposablePart.You do not have to derive your component part from ComposablePart. Au lieu de cela, vous devez ajouter un ExportAttribute d’attribut à la classe ou un membre de classe que vous souhaitez exporter.Instead, you must add a ExportAttribute attribute to the class or class member that you want to export. Cet attribut spécifie le contrat par le composant d’une autre partie peut importer vos fonctionnalités.This attribute specifies the contract by which another component part can import your functionality.

Le contrat d’exportationThe export contract

Le ExportAttribute définit l’entité (classe, interface ou structure) qui est en cours d’exportation.The ExportAttribute defines the entity (class, interface, or structure) that is being exported. En règle générale, l’attribut export prend un paramètre qui spécifie le type de l’exportation.Typically, the export attribute takes a parameter that specifies the type of the export.

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

Par défaut, le ExportAttribute attribut définit un contrat qui est le type de la classe d’exportation.By default, the ExportAttribute attribute defines a contract that is the type of the exporting class.

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

Dans l’exemple, la valeur par défaut [Export] attribut équivaut à [Export(typeof(TestAdornmentLayerDefinition))].In the example, the default [Export] attribute is equivalent to [Export(typeof(TestAdornmentLayerDefinition))].

Vous pouvez également exporter une propriété ou méthode, comme illustré dans l’exemple suivant.You can also export a property or method, as shown in the following example.

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

Importer une exportation MEFImport a MEF Export

Lorsque vous souhaitez consommer une exportation MEF, vous devez connaître le contrat (généralement le type) et en ce qui a été exporté, ajoutez un ImportAttribute attribut ayant cette valeur.When you want to consume a MEF export, you must know the contract (typically the type) by which it was exported, and add a ImportAttribute attribute that has that value. Par défaut, l’attribut d’importation prend un paramètre, ce qui est le type de la classe qu’il modifie.By default, the import attribute takes one parameter, which is the type of the class that it modifies. Les lignes suivantes de l’importation de code la IClassificationTypeRegistryService type.The following lines of code import the IClassificationTypeRegistryService type.

[Import]  
internal IClassificationTypeRegistryService ClassificationRegistry;  

Obtenir des fonctionnalités de l’éditeur à partir d’un composant MEFGet editor functionality from a MEF component part

Si votre code existant est un composant MEF, vous pouvez utiliser des métadonnées MEF pour consommer des composants de l’éditeur.If your existing code is a MEF component part, you can use MEF metadata to consume editor component parts.

Pour utiliser la fonctionnalité d’éditeur à partir d’un composant MEFTo consume editor functionality from a MEF component part

  1. Ajouter des références aux System.Composition.ComponentModel.dll, qui est dans le global assembly cache (GAC) et pour les assemblys de l’éditeur.Add references to System.Composition.ComponentModel.dll, which is in the global assembly cache (GAC), and to the editor assemblies.

  2. Ajouter les informations pertinentes à l’aide d’instructions.Add the relevant using statements.

    using System.ComponentModel.Composition;  
    using Microsoft.VisualStudio.Text;  
    
  3. Ajouter le [Import] attribut à votre interface de service, comme suit.Add the [Import] attribute to your service interface, as follows.

    [Import]  
    ITextBufferFactoryService textBufferService;  
    
  4. Lorsque vous avez obtenu le service, vous pouvez utiliser l’un de ses composants.When you have obtained the service, you can consume any one of its components.

  5. Lorsque vous avez compilé votre assembly, placez-le dans le *... \Common7\IDE\Components* dossier de votre installation de Visual Studio.When you have compiled your assembly, put it in the *..\Common7\IDE\Components* folder of your Visual Studio installation.

Voir aussiSee also

Points d’extension éditeur et le service de langageLanguage service and editor extension points