레이어 다이어그램에 사용자 지정 속성 추가
레이어 다이어그램에 대한 확장 코드를 작성할 때 Visual Studio Ultimate, 레이어 다이어그램에 요소를 사용 하 여 값을 저장할 수 있습니다.다이어그램을 저장 하 고 다시 열 때 값을 유지 합니다.이 속성에 표시 되도록 할 수도 있습니다의 속성 창 사용자 확인 하 고 편집할 수 있습니다.예를 들어, 각 계층에 대한 정규식을 지정 하 고 각 계층에서 클래스의 이름을 사용자가 지정한 패턴과 일치 하는지 확인할 수 있는 유효성 검사 코드를 작성 하는 사용자 수 있습니다 수 있습니다.
사용자에 게 표시 되지 않는 속성
레이어 다이어그램에 있는 모든 요소에 값을 연결 하는 코드 바로 원한다 면 MEF 구성 요소를 정의할 필요가 없습니다.라는 하는 사전이 Properties 에서 ILayerElement.레이어 요소를 사전에 마샬링할 수 값을 추가 하기만 하면 됩니다.레이어 다이어그램의 일부로 저장 됩니다.자세한 내용은 프로그램 코드에서 레이어 모델 탐색 및 업데이트을 참조하십시오.
사용자가 편집할 수 있는 속성
초기 준비
중요 |
---|
속성을 표시 하려면 레이어 속성을 표시 하려면 원하는 각 컴퓨터에서 다음과 같이 변경 해야 합니다.
|
VSIX 프로젝트에 코드를 있는지 확인 하십시오
속성 명령이 나 제스처, 유효성 검사 프로젝트의 일부인 경우 아무 것도 추가 하지 않아도 됩니다.MEF 구성 요소로 정의 된 Visual Studio 확장성 프로젝트에서 사용자 지정 속성에 대한 코드를 정의 합니다.자세한 내용은 레이어 다이어그램에 명령 및 제스처 추가 또는 레이어 다이어그램에 사용자 지정 아키텍처 유효성 검사 추가를 참조하십시오.
사용자 지정 속성을 정의 합니다.
사용자 지정 속성을 만들려면 다음과 같이 클래스를 정의 합니다.
[Export(typeof(IPropertyExtension))]
public class MyProperty
: PropertyExtension<ILayerElement>
{
// Implement the interface.
}
속성을 정의할 수 있습니다 ILayerElement 또는 해당 파생된 클래스를 포함 합니다.
ILayerModel - 모델
ILayer - 각 레이어
ILayerDependencyLink - 레이어 간의 링크
ILayerComment
ILayerCommentLink
사용자 지정 속성을 보려면
중요 |
---|
모델링 프로젝트를 로드 하기 전에 아키텍처 탐색기 열기 경우에 사용자 지정 속성을 표시 합니다.아키텍처 탐색기를 열고 다음 중지 하 고 사용자 지정 속성을 보려면 Visual Studio 다시 시작 해야 합니다.에 아키텍처 메뉴를 선택 Windows, 아키텍처 탐색기. |
사용자 지정 속성을 테스트 하려면 Visual Studio 실험 인스턴스를 시작 하려면 f5 키를 누릅니다.적절 한 레이어 요소의 예로 만들고 선택 합니다.사용자 지정 속성이 속성 창에 표시 됩니다.
예제
다음 코드는 일반적인 사용자 지정 속성 설명자입니다.이 코드에서는 사용자가 사용자 지정 유효성 검사 메서드에 값을 제공할 수 있도록 하는 레이어 모델의 부울 속성(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;
}
}
}
}