Agregar propiedades personalizadas a diagramas de capas
Cuando se escribe el código de extensión de diagramas de capas en Visual Studio Ultimate, puede almacenar valores con cualquier elemento de un diagrama de capas.Los valores se conservarán cuando se guarda y se vuelva a abrir el diagrama.También puede hacer que estas propiedades aparecen en la ventana propiedades de modo que los usuarios puedan verlas y modificarlas.Por ejemplo, podría permitir a los usuarios especificar una expresión regular para cada capa, y escribir código de validación para comprobar que los nombres de clases de cada capa se ajustan al modelo especificado por el usuario.
Propiedades no visibles para el usuario
Si desea que el código para asociar valores a cualquier elemento de un diagrama de capas, no es necesario definir un componente MEF.Hay un diccionario denominado Properties en ILayerElement.Basta con agregar los valores marshalable al diccionario de cualquier elemento de capa.Se guardarán como parte del diagrama de capas.Para obtener más información, vea Navegar y actualizar modelos de capas en el código del programa.
Propiedades que el usuario puede modificar
Preparación inicial
Importante |
---|
Para que las propiedades aparecen, debe realizar el cambio siguiente en cada equipo donde desea propiedades de nivel para ser visible.
|
Asegúrese de que el código está en un proyecto VSIX
Si la propiedad es parte de un comando, gesto, o un proyecto de validación, no necesita agregar nada.El código para la propiedad personalizada debe definirse en un proyecto de extensibilidad de Visual Studio definido como componente MEF.Para obtener más información, vea Agregar comandos y gestos a diagramas de capas o Agregar validación de arquitectura personalizada a diagramas de capas.
Defina la propiedad personalizada
Para crear una propiedad personalizada, defina una clase como ésta:
[Export(typeof(IPropertyExtension))]
public class MyProperty
: PropertyExtension<ILayerElement>
{
// Implement the interface.
}
Puede definir propiedades en ILayerElement o cualquiera de sus clases derivadas, que incluyen:
ILayerModel: el modelo
ILayer: cada capa
ILayerDependencyLink: los vínculos entre las capas
ILayerComment
ILayerCommentLink
Para ver las propiedades personalizadas
Importante |
---|
Las propiedades personalizadas solo aparecen si el Explorador de arquitectura está abierto antes de cargar el proyecto de modelado.Quizá tenga que el Explorador de arquitectura y después detener y reiniciar Visual Studio para ver propiedades personalizadas.En el menú de Arquitectura , elija Ventanas, Explorador de arquitectura. |
Para probar las propiedades personalizadas, presione F5 para iniciar una instancia experimental de Visual Studio.Cree un ejemplo del elemento adecuado del nivel, y selecciónelo.Verá la propiedad personalizada en la ventana Propiedades.
Ejemplo
El siguiente código es un descriptor de propiedad personalizado típico.Define una propiedad booleana en el modelo de capas (ILayerModel) que permite al usuario proporcionar valores para un método de validación personalizado.
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;
}
}
}
}