Добавление пользовательских свойств в схемы слоев
При написании кода расширения для схем слоев в Visual Studio Ultimate можно хранить значения с любым элементом на схеме слоев.Значения сохраняются, если будет учитываться и будет снова открытую схему.Кроме того, можно настроить эти свойства отображаются в окне Свойства, чтобы пользователи могли просматривать и изменять их.Например, можно разрешить пользователям задавать регулярное выражение для каждого уровня и написать код для проверки, что имена классов в каждом уровне соответствуют шаблону, определенному пользователем.
Свойства не видимые пользователю
Если требуется вложить код значения на любой элемент на схеме слоев, нет необходимости указывать компонент MEF.Словарь с именем Properties в ILayerElement.Просто добавьте marshalable значения в словарь любого элемента уровня.Они сохраняются как часть схемы слоев.Дополнительные сведения см. в разделе Перемещение по моделям слоев в коде программы и их обновление.
Свойства, которые пользователь может изменять
Начальная подготовка
Важно |
---|
Чтобы появиться свойства, необходимо сделать следующее изменение на каждом компьютере, на котором свойства уровня, вносимых.
|
Убедитесь, что код в проекте 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;
}
}
}
}