Managed extensibility dans l'éditeur
L'éditeur est généré à l'aide de les composants managés (MEF) managed extensibility framework. Vous pouvez créer vos propres composants MEF pour étendre l'éditeur, et votre code peut consommer des composants d'éditeur également.
Vue d'ensemble de managed extensibility framework
MEF est une bibliothèque.NET qui vous permet d'ajouter et modifier des fonctionnalités d'une application ou d'un composant qui suit le modèle de programmation MEF. L'éditeur Visual Studio peut fournir et consommer des éléments MEF.
MEF est contenue dans l'assembly.NET Framework version 4 System.ComponentModel.Composition.dll.
Pour plus d'informations sur MEF, consultez Managed Extensibility Framework (MEF).
Éléments et conteneurs de composition
Un composant est une classe ou un membre d'une classe qui peut effectuer un (ou les deux) suit :
Consommer un autre composant
Est consommé par un autre composant
Par exemple, une application d'achat qui possède un composant d'enregistrement de commandes qui dépend de la disponibilité des produits de données fournies par un composant d'inventaire d'entrepôt. Dans la terminologie MEF, la partie d'inventaire peut exporter la disponibilité des produits de données, et la partie d'enregistrement de commandes peut importer les données. La partie d'enregistrement de commandes et la partie d'inventaire ne doivent pas nécessairement connaître l'un l'autre ; le conteneur de composition (fournie par l'application hôte) est chargé de stocker l'ensemble d'exportations, et de résoudre les exportations et les importations.
Le conteneur de composition, CompositionContainer, est généralement possédé par l'hôte. Le conteneur de composition gère un catalogue des éléments exportées.
Exportation et importation des éléments
Vous pouvez exporter toute fonctionnalité, tant qu'il est implémentée comme une classe publique ou membre public d'une classe (propriété ou une méthode). Vous ne devez pas dériver votre composant d' ComposablePart. À la place, vous devez ajouter un attribut d' ExportAttribute à la classe ou au membre de classe que vous souhaitez exporter. Cet attribut spécifie le contrat par lequel une autre composant peut importer votre fonctionnalité.
Le contrat d'exportation
ExportAttribute définit l'entité (classe, interface, ou structure) qui est exportée. En général, l'attribut importer accepte un paramètre qui spécifie le type de l'exportation.
[Export(typeof(ContentTypeDefinition))]
class TestContentTypeDefinition : ContentTypeDefinition { }
Par défaut, l'attribut d' ExportAttribute définit un contrat qui est le type de la classe qui exporte.
[Export]
[Name("Structure")]
[Order(After = "Selection", Before = "Text")]
class TestAdornmentLayerDefinition : AdornmentLayerDefinition { }
Dans l'exemple, l'attribut d' [Export] par défaut est équivalent à [Export(typeof(TestAdornmentLayerDefinition))].
Vous pouvez également exporter une propriété ou une méthode, comme indiqué dans l'exemple suivant.
[Export]
[Name("Scarlet")]
[Order(After = "Selection", Before = "Text")]
public AdornmentLayerDefinition scarletLayerDefinition;
Importer une exportation MEF
Lorsque vous souhaitez utiliser une exportation MEF, vous devez connaître le contrat (généralement le type) en fonction duquel elle a été exportée, et ajouter un attribut d' ImportAttribute qui comporte cette valeur. Par défaut, l'attribut d'importation prend un paramètre, qui est le type de la classe dont il modifie. Les lignes de code suivantes d'importer le type d' IClassificationTypeRegistryService .
[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;
Obtention de la fonctionnalité d'éditeur d'un composant MEF
Si votre code existant est un composant MEF, vous pouvez utiliser des métadonnées MEF pour consommer des éléments d'éditeur.
Pour utiliser les fonctionnalités d'éditeur d'un composant MEF
Ajoutez des références à System.Composition.ComponentModel.dll, qui se trouve dans le Global Assembly (GAC) Cache, et aux assemblys de l'éditeur.
Ajoutez les instructions using appropriées.
using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text;
Ajoutez l'attribut d' [Import] à l'interface de service, comme suit.
[Import] ITextBufferFactoryService textBufferService;
Lorsque vous avez obtenu le service, vous pouvez utiliser à l'un de ses composants.
Lorsque vous avez compilé votre assembly, placez -le dans. installation de \Common7\IDE\Components\ folder of your Visual Studio.