Freigeben über


Hinzufügen von benutzerdefinierten Eigenschaften zu einem Ebenendiagramm

Wenn Sie Erweiterungscode für Ebenendiagramme in Visual Studio Ultimate schreiben, können Sie Werte mit jedem Element in einem Ebenendiagramm speichern.Die Werte beibehalten, wenn das Diagramm gespeichert und erneut geöffnet wird.Sie können diese Eigenschaften im Fenster Eigenschaften werden auch angezeigt werden, sodass sie von Benutzern angezeigt und bearbeitet werden können.Beispielsweise können Sie Benutzer einen regulären Ausdruck für jede Ebene angeben werden und schreiben Validierungscode, um sicherzustellen, dass die Namen der Klassen in jeder Ebene das Muster entsprechen, das vom Benutzer angegeben wird.

Eigenschaften nicht den Benutzer sichtbar

Wenn Sie nur den Code Werte zu einem Element in einem Ebenendiagramm anfügen möchten, müssen Sie nicht, um eine MEF-Komponente zu definieren.Es gibt ein Wörterbuch, das Properties in ILayerElement genannt wird.Fügen Sie nur marshalable Werte dem Wörterbuch eines beliebigen Ebenenelements hinzu.Sie werden als Teil des Ebenendiagramms gespeichert.Weitere Informationen finden Sie unter Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode.

Eigenschaften, die der Benutzer bearbeiten kann

Ursprüngliche Vorbereitung

Wichtiger HinweisWichtig

Um Eigenschaften angezeigt werden, müssen Sie die folgende Änderung auf jedem Computer vornehmen in dem Ebeneneigenschaften sichtbar sein.

  1. Ausführungs-Editor mithilfe von Als Administrator ausführen.Öffnen Sie %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\extension.vsixmanifest.

  2. Innerhalb des Elements Content fügen Sie hinzu:

    <MefComponent>Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.Provider.dll</MefComponent>
  3. Im Windows-Startmenü unter Microsoft Visual Studio 2012 öffnen Visual Studio Tools, Entwicklereingabeaufforderung.

    die EINGABETASTE:

    devenv /rootSuffix /updateConfiguration

    devenv /rootSuffix Exp /updateConfiguration

  4. Starten Sie Visual Studio neu.

Stellen Sie sicher, dass der Code in einem VSIX-Projekt ist

Wenn die Eigenschaft ein Teil eines Befehls, Gesten oder des Validierungsprojekts ist, müssen Sie, um nichts hinzuzufügen.Der Code für die benutzerdefinierte Eigenschaft sollte in einem Visual Studio-Erweiterbarkeitsprojekt definiert werden, das als MEF-Komponente definiert ist.Weitere Informationen finden Sie unter Hinzufügen von Befehlen und Bewegungen zu Ebenendiagrammen oder unter Hinzufügen einer benutzerdefinierten Architekturüberprüfung zu Ebenendiagrammen.

Definieren Sie die benutzerdefinierte Eigenschaft

Um eine benutzerdefinierte Eigenschaft zu erstellen, definieren Sie eine Klasse als:

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

Sie können Eigenschaften für ILayerElement oder einem ihrer abgeleiteten Klassen definieren, die Folgendes umfassen:

  • ILayerModel - das Modell

  • ILayer - jede Ebene

  • ILayerDependencyLink - die Links zwischen Ebenen

  • ILayerComment

  • ILayerCommentLink

Um die benutzerdefinierten Eigenschaften finden

Wichtiger HinweisWichtig

Benutzerdefinierte Eigenschaften werden nur angezeigt, wenn der Architektur-Explorer geöffnet ist, bevor Sie das Modellierungsprojekt laden.Sie können müssen Sie den Architektur-Explorer und anschließend Visual Studio zu beenden und neu starten, um benutzerdefinierte Eigenschaften anzuzeigen.Klicken Sie im Menü Architektur wählen Sie Fenster, Architektur-Explorer aus.

Um die benutzerdefinierten Eigenschaften zu testen, drücken Sie F5 um eine experimentelle Instanz von Visual Studio beginnen.Erstellen Sie ein Beispiel des entsprechenden Ebenenelements, und wählen Sie es aus.Sie finden die benutzerdefinierte Eigenschaft im Eigenschaftenfenster.

Beispiel

Der folgende Code entspricht einem typischen benutzerdefinierten Eigenschaftendeskriptor.Er definiert eine boolesche Eigenschaft für das Ebenenmodell (ILayerModel), mit dem der Benutzer Werte für eine benutzerdefinierte Validierungsmethode bereitstellen kann.

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;
      }
    }
  }
}

Siehe auch

Konzepte

Erweitern von Ebenendiagrammen