Поделиться через


Добавление пользовательских свойств в схемы слоев

При написании кода расширения для схем слоев в Visual Studio Ultimate можно хранить значения с любым элементом на схеме слоев. Значения сохраняются, если будет учитываться и будет снова открытую схему. Кроме того, можно настроить эти свойства отображаются в окне Свойства, чтобы пользователи могли просматривать и изменять их. Например, можно разрешить пользователям задавать регулярное выражение для каждого уровня и написать код для проверки, что имена классов в каждом уровне соответствуют шаблону, определенному пользователем.

Свойства, не видимые пользователю

Если требуется вложить код значения на любой элемент на схеме слоев, нет необходимости указывать компонент MEF. Словарь с именем Properties в ILayerElement. Просто добавьте marshalable значения в словарь любого элемента уровня. Они сохраняются как часть схемы слоев. Для получения дополнительной информации см. Перемещение по моделям слоев в коде программы и их обновление.

Свойства, которые пользователь может изменять

Начальная подготовка

Важно!

Чтобы появиться свойства, необходимо сделать следующее изменение на каждом компьютере, на котором свойства уровня, вносимых.

  1. Блокнот выполняется с помощью Запуск от имени администратора.Откройте %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\extension.vsixmanifest.

  2. В элемент Content добавьте:

    <MefComponent>Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.Provider.dll</MefComponent>
  3. В меню "Пуск" Windows выберите Microsoft Visual Studio 2012, Инструменты Visual Studio, окно Командная строка для разработчиков.

    Входные данные:

    devenv /rootSuffix /updateConfiguration

    devenv /rootSuffix Exp /updateConfiguration

  4. Перезапустите Visual Studio.

Убедитесь, что код в проекте VSIX

Если свойство является частью, команды или жеста проекта проверки, нет необходимости добавлять любые действия. Код для пользовательского свойства должен быть указан в проекте расширяемости Visual Studio, указанном в качестве компонент MEF. Дополнительные сведения см. в разделе Добавление команд и жестов в схемы слоев или Добавление пользовательской проверки архитектуры в схемы слоев.

Определите пользовательское свойство

Для создания пользовательского свойства определите класс следующим образом:

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

Можно задать свойства ILayerElement или любого из его производных классов, которые включают:

  • ILayerModel — модель

  • ILayer — каждый слой

  • ILayerDependencyLink — ссылки между слоями

  • ILayerComment

  • ILayerCommentLink

Просмотр пользовательских свойств

Важно!

Пользовательские свойства отображаются только если обозреватель архитектуры открыт, то перед загрузите проект моделирования.Можно решение обозревателя архитектуры и затем остановить и перезапустить Visual Studio для просмотра пользовательских свойств.В меню Архитектура выберите Окна, Обозреватель архитектуры.

Чтобы выполнить пользовательские свойства, нажмите клавишу F5, чтобы запустить экспериментальный экземпляр Visual Studio. Создайте пример соответствующего элемента уровня и выделите его. Появится пользовательское свойство в окне свойств.

Пример

Следующий код является типичным дескриптором пользовательских свойств. Он определяет логическое свойство в модели слоев (ILayerModel), которое позволяет пользователю предоставлять значения для пользовательского метода проверки.

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

См. также

Основные понятия

Расширение схем слоев