Compartir a través de


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

Nota importanteImportante

Para que las propiedades aparecen, debe realizar el cambio siguiente en cada equipo donde desea propiedades de nivel para ser visible.

  1. Bloc de notas de usar Ejecute como administrador.Abra %ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\ExtensibilityRuntime\extension.vsixmanifest.

  2. Dentro del elemento de Content, agregue:

    <MefComponent>Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.Provider.dll</MefComponent>
  3. En el menú Inicio de Windows, en Microsoft Visual Studio 2012, Visual Studio Tools, abra Símbolo del sistema del desarrollador.

    ENTRAR:

    devenv /rootSuffix /updateConfiguration

    devenv /rootSuffix Exp /updateConfiguration

  4. Reinicie Visual Studio.

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

Nota importanteImportante

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

Vea también

Conceptos

Ampliar diagramas de capas