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 tout élément sur un diagramme de couche. Les valeurs seront persistantes lorsque le diagramme est enregistré et rouvert. Vous aussi pouvez faire en sorte que ces propriétés s'affichent dans la fenêtre Propriétés, afin que les utilisateurs puissent les voir et les modifier. Par exemple, vous pouvez permettre aux utilisateurs de spécifier une expression régulière pour chaque couche, et écrire le code de validation pour vérifier que les noms de classes de chaque couche sont conformes au modèle spécifié par l'utilisateur.
Propriétés non visibles par l'utilisateur
Si vous souhaitez simplement que votre code joigne des valeurs à tout élément dans un diagramme de couche, vous n'avez pas besoin de définir de composant MEF. Il existe un dictionnaire nommé Properties dans ILayerElement. Ajoutez simplement les valeurs marshalables au dictionnaire de tout élément de couche. Elles seront stockées en tant que partie du 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 initiale
Important
Pour que les propriétés apparaissent, vous devez apporter la modification suivante sur chaque ordinateur où vous souhaitez que les propriétés de couche soient visibles.
-
Lancez le Bloc Notes en utilisant Exécuter en tant qu'administrateur.Ouvrez %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\extension.vsixmanifest.
-
Dans l'élément Content, ajoutez :
<MefComponent>Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.Provider.dll</MefComponent>
-
Dans le menu Démarrer de Windows, sous Microsoft Visual Studio 2012, Visual Studio Tools, ouvrez l' Invite de commandes développeur.
Entrez :
devenv /rootSuffix /updateConfiguration
devenv /rootSuffix Exp /updateConfiguration
-
Redémarrez Visual Studio.
Vérifiez que votre code est dans un projet VSIX
Si votre propriété fait partie d'une commande, d'un mouvement, ou un projet de validation, vous n'avez rien besoin d'ajouter. 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 n'importe laquelle 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 avant que vous ne chargiez le projet de modélisation.Vous devrez peut-être ouvrir le navigateur d'architecture puis 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 vos 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;
}
}
}
}