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


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

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

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

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

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

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

Важное примечаниеВажно

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

  1. Блокнот выполняется с помощью Запуск от имени администратора.Откройте %ProgramFiles%\Microsoft Visual Studio 11.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 Tools будет открыт Командная строка для разработчиков.

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

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

См. также

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

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