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 auf einem Ebenendiagramm speichern. Die Werte bleiben erhalten, wenn das Diagramm gespeichert und erneut geöffnet wird. Sie können außerdem festlegen, dass diese Eigenschaften im Fenster Eigenschaften aufgeführt werden, sodass sie von Benutzern angezeigt und bearbeitet werden können. Beispielsweise können Sie Benutzer für jede Ebene einen regulären Ausdruck angeben lassen und Überprüfungscode schreiben, um sicherzustellen, dass die Namen der Klassen in jeder Ebene dem Muster entsprechen, das vom Benutzer angegeben wird.

Für den Benutzer nicht sichtbare Eigenschaften

Wenn durch den Code nur Werte an ein Element in einem Ebenendiagramm angefügt werden sollen, müssen Sie keine MEF-Komponente definieren. Es gibt ein Wörterbuch namens Properties in ILayerElement. Fügen Sie einfach Werte zum Wörterbuch jedes Ebenenelements hinzu, die gemarshallt werden können. 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

Erste Vorbereitung

Wichtig

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

  1. Führen Sie Editor mit der Option Als Administrator ausführen aus.Öffnen Sie %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\extension.vsixmanifest.

  2. Fügen Sie innerhalb des Content-Elements Folgendes hinzu:

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

    Geben Sie Folgendes ein:

    devenv /rootSuffix /updateConfiguration

    devenv /rootSuffix Exp /updateConfiguration

  4. Starten Sie Visual Studio neu.

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

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

Definieren der benutzerdefinierten Eigenschaft

Um eine benutzerdefinierte Eigenschaft zu erstellen, definieren Sie eine Klasse folgendermaßen:

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

Sie können Eigenschaften für ILayerElement oder eine der abgeleiteten Klassen definieren, darunter folgende:

  • ILayerModel - das Modell

  • ILayer - jede Ebene

  • ILayerDependencyLink - die Links zwischen Ebenen

  • ILayerComment

  • ILayerCommentLink

So zeigen Sie die benutzerdefinierten Eigenschaften an

Wichtig

Benutzerdefinierte Eigenschaften werden nur angezeigt, wenn der Architektur-Explorer geöffnet ist, bevor Sie das Modellierungsprojekt laden.Sie müssen den Architektur-Explorer möglicherweise öffnen und Visual Studio dann beenden und erneut starten, um benutzerdefinierte Eigenschaften anzuzeigen.Wählen Sie im Menü Architektur die Option Fenster und dann Architektur-Explorer aus.

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

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