Partager via


Ajout de propriétés personnalisées à un diagramme de couche

Lorsque vous écrivez du code d'extension pour les diagrammes de couche dans Visual Studio Ultimate, vous pouvez stocker des valeurs avec n'importe quel élément sur un diagramme de couche.Les valeurs persisteront lorsque le diagramme est stocké et rouvert.Vous pouvez également faire apparaître ces propriétés dans la fenêtre Propriétés afin que les utilisateurs puissent les voir et changer.Par exemple, vous pouvez permettre aux utilisateurs de spécifier une expression régulière pour chaque couche, et écrivez le code de validation pour vérifier que les noms de classes dans chaque couche sont conformes au modèle spécifié par l'utilisateur.

Propriétés non visibles par l'utilisateur

Si vous souhaitez uniquement votre code pour joindre des valeurs à tout élément dans un diagramme de couche, vous n'avez pas besoin de définir un composant MEF.Il existe un dictionnaire nommé Properties dans ILayerElement.Ajoutez simplement les valeurs marshalable au dictionnaire de tout élément de couche.Elles sont stockées dans le diagramme de couche.Pour plus d'informations, consultez Navigation et mise à jour des modèles de couche dans le code de programme.

Propriétés que l'utilisateur peut modifier

Préparation de démarrage

Important

Pour rendre les propriétés s'afficher, vous devez apporter la modification suivante sur chaque ordinateur où vous souhaitez que les propriétés de couche pour être visible.

  1. Exécutez le bloc-notes à l'aide Exécuter en tant qu’administrateur.Ouvrez %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\extension.vsixmanifest.

  2. Dans l'élément d' Content, ajoutez :

    <MefComponent>Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.Provider.dll</MefComponent>
  3. Dans le menu démarrer de windows, sous Microsoft Visual Studio 2012, Outils Visual Studio, ouvrez Invite de commandes de développement.

    Entrez :

    devenv /rootSuffix /updateConfiguration

    devenv /rootSuffix Exp /updateConfiguration

  4. Redémarrez Visual Studio.

Assurez-vous que votre code est dans un projet VSIX

Si votre propriété fait partie d'une commande, d'une entrée tactile, ou d'un projet de validation, vous n'avez besoin d'ajouter rien.Le code de votre propriété personnalisée doit être défini dans un projet d'extensibilité Visual Studio défini en tant que composant MEF.Pour plus d'informations, consultez Ajout de commandes et de mouvements aux diagrammes de couche ou Ajout d'une validation d'architecture personnalisée aux diagrammes de couche.

Définissez la propriété personnalisée

Pour créer une propriété personnalisée, définissez une classe comme suit :

[Export(typeof(IPropertyExtension))]
public class MyProperty 
      : PropertyExtension<ILayerElement>
{
  // Implement the interface.
}

Vous pouvez définir des propriétés sur ILayerElement ou une de ses classes dérivées, notamment :

  • ILayerModel - le modèle

  • ILayer - chaque couche

  • ILayerDependencyLink - les liens entre les couches

  • ILayerComment

  • ILayerCommentLink

Pour afficher les propriétés personnalisées

Important

Les propriétés personnalisées s'affichent uniquement si le navigateur de l'architecture est ouvert pour avoir chargé le projet de modélisation.Vous pouvez devez l'architecture ouverte et ensuite arrêter et redémarrer Visual Studio pour afficher les propriétés personnalisées.Dans le menu Architecture, choisissez Fenêtres, Navigateur de l'architecture.

Pour tester les propriétés personnalisées, appuyez sur F5 pour démarrer une instance expérimentale de Visual Studio.Créez un exemple de l'élément approprié de couche, puis sélectionnez-le.Vous verrez votre propriété personnalisée dans la fenêtre Propriétés.

Exemple

Le code suivant est un descripteur de propriété personnalisé classique.Il définit une propriété booléenne sur le modèle de couche (ILayerModel) qui permet à l'utilisateur de fournir des valeurs pour une méthode de validation personnalisée.

using System;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;

namespace MyNamespace
{
  /// <summary>
  /// Custom properties are added to the Layer Designer via a custom
  /// Property Descriptor. We have to export this Property Descriptor
  /// using MEF to make it available in the Layer Designer.
  /// </summary>
  [Export(typeof(IPropertyExtension))]
  public class AllTypesMustBeReferencedProperty 
      : PropertyExtension<ILayerModel>
  {
    /// <summary>
    /// Each custom property must have a unique name. 
    /// Usually we use the full name of this class.
    /// </summary>
    public static readonly string FullName =
      typeof(AllTypesMustBeReferencedProperty).FullName;

    /// <summary>
    /// Construct the property. Notice the use of FullName.
    /// </summary>
    public AllTypesMustBeReferencedProperty()
            : base(FullName)
    {  }

    /// <summary>
    /// The display name is shown in the Properties window.
    /// We therefore use a localizable resource.
    /// </summary>
    public override string DisplayName
    {
      get { return Strings.AllTypesMustBeReferencedDisplayName; }
    }

    /// <summary>
    /// Description shown at the bottom of the Properties window.
    /// We use a resource string for easier localization.
    /// </summary>
    public override string Description
    {
      get { return Strings.AllTypesMustBeReferencedDescription; }
    }

    /// <summary>
    /// This is called to set a new value for this property. We must
    /// throw an exception if the value is invalid.
    /// </summary>
    /// <param name="component">The target ILayerElement</param>
    /// <param name="value">The new value</param>
    public override void SetValue(object component, object value)
    {
      ValidateValue(value);
      base.SetValue(component, value);
    }
    /// <summary>
    /// Helper to validate the value.
    /// </summary>
    /// <param name="value">The value to validate</param>
    private static void ValidateValue(object value)
    {  }

    public override Type PropertyType
    { get { return typeof(bool); } }

    /// <summary>
    /// The segment label of the properties window.
    /// </summary>
    public override string Category
    { 
      get
      {
        return Strings.AllTypesMustBeReferencedCategory;
      }
    }
  }
}

Voir aussi

Concepts

Extension des diagrammes de couche