Udostępnij za pośrednictwem


Dodawanie właściwości niestandardowych do diagramu warstwy

Podczas wpisywania kodu rozszerzenia schematów warstwy w Visual Studio Ultimate, można przechowywać wartości z dowolnego elementu na diagramie warstwy.Wartości będą się utrzymywać, po zapisaniu i ponownym otwarciu diagramu.Można także korzystać z tych właściwości, które pojawiają się w oknie Właściwości tak, że użytkownicy mogą wyświetlić i edytować je.Na przykład można pozwolić użytkownikom na określenie wyrażenia regularnego dla każdej warstwy i napisanie kodu sprawdzania poprawności, aby sprawdzić zgodność nazw klas w każdej warstwie z szablonem określonym przez użytkownika.

Właściwości nie są widoczne dla użytkownika

Jeśli chcesz, aby Twój kod dołączył wartości dowolnego elementu w diagramie warstwy, nie musisz zdefiniować składnik MEF.Jest słownik o nazwie Properties w ILayerElement.Po prostu dodaj zorganizowane wartości do słownika dowolnego elementu warstwy.Zostaną zapisane jako części diagramu warstwy.Aby uzyskać więcej informacji, zobacz Nawigowanie i aktualizowanie modeli warstw w kodzie programu.

Właściwości, które użytkownik może edytować

Wstępne przygotowania

Ważna uwagaWażne

Aby sprawić, żeby wyświetliły się właściwości, należy wprowadzić następującą zmianę na każdym komputerze, na którym właściwości warstwy mają być widoczne.

  1. Uruchom program Notatnik za pomocą Uruchom jako Administrator.Otwórz %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\extension.vsixmanifest

  2. Wewnątrz elementu Content dodaj:

    <MefComponent>Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.Provider.dll</MefComponent>
  3. W menu startowym systemu Windows, w Microsoft Visual Studio 2012, Visual Studio Tools, otwórz Wiersz polecenia dewelopera.

    Wprowadź:

    devenv /rootSuffix /updateConfiguration

    devenv /rootSuffix Exp /updateConfiguration

  4. Uruchom ponownie program Visual Studio.

Upewnij się, że kod jest w projekcie VSIX

Jeśli Twoja własność jest częścią polecenia, gestu lub projektem sprawdzania poprawności, nie trzeba nic dodawać.W projekcie programu Visual Studio Extensibility kod dla właściwości niestandardowej powinien być zdefiniowany jako składnik MEF.Aby uzyskać więcej informacji, zobacz Dodawanie poleceń i gestów do diagramów warstw lub Dodawanie walidacji niestandardowej architektury do diagramów warstw.

Zdefiniuj właściwości niestandardowe

Aby utworzyć niestandardową właściwość, zdefiniuj klasę podobną do tej:

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

Można zdefiniować właściwości na ILayerElement lub którejkolwiek z jej klas pochodnych, które obejmują:

  • ILayerModel — model

  • ILayer — każda warstwa

  • ILayerDependencyLink — łącza między warstwami

  • ILayerComment

  • ILayerCommentLink

Aby wyświetlić niestandardowe właściwości

Ważna uwagaWażne

Właściwości niestandardowe są wyświetlane tylko wtedy, gdy Eksplorator architektury jest otwarty przed rozpoczęciem ładowania projektu modelowania.Trzeba będzie otworzyć w Eksplorator architektury i następnie zatrzymać i ponownie uruchomić program Visual Studio, aby zobaczyć właściwości niestandardowe.W menu Architektura wybierz Okna, Eksplorator architektury.

Aby przetestować działanie właściwości niestandardowej, naciśnij klawisz F5, aby uruchomić wystąpienie doświadczalne programu Visual Studio.Utwórz przykład odpowiedniego elementu warstwy i zaznacz go.Zobaczysz właściwości niestandardowe w oknie dialogowym właściwości.

Przykład

Następujący kod jest typową właściwością niestandardową deskryptora.Definiuje właściwość typu Boolean na modelu warstwy (ILayerModel), który umożliwia użytkownikowi podanie wartości dla niestandardowej metody walidacji.

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

Zobacz też

Koncepcje

Rozszerzanie diagramów warstw