Přidání vlastních vlastností do diagramu vrstev
Při psaní kódu rozšíření pro diagramy vrstvy v aplikaci Visual Studio Ultimate můžete ukládat hodnoty libovolným prvkem na diagram vrstvy.Hodnoty přetrvají i po uložení a opětovném otevření diagramu.Můžete také tyto vlastnosti zobrazit v okně Vlastnosti, takže uživatelé je mohou vidět a upravovat.Například můžete umožnit uživatelům určit regulární výraz pro každou vrstvu a psát ověřovací kód pro ověření, že názvy tříd v každé vrstvě odpovídají vzoru určenému uživatelem.
Vlastnosti, které nejsou viditelné uživateli
Pokud chcete připojit k libovolnému prvku v diagramu vrstvy hodnoty kódu, není nutné definovat komponentu MEF.Existuje slovník s názvem Properties v ILayerElement.Stačí přidat zařaditelné hodnoty do slovníku libovolného prvku vrstvy.Budou uloženy jako části diagramu vrstvy.Další informace naleznete v tématu Procházení a aktualizace modelů vrstev v programovém kódu.
Vlastnosti, které uživatel může upravovat
Počáteční příprava
Důležité |
---|
Chcete-li zobrazit vlastnosti, je třeba provést následující změnu v každém počítači, kde chcete mít viditelné vlastnosti vrstvy.
|
Zkontrolujte, zda že je váš kód v projektu VSIX
Pokud je vaše vlastnost součástí příkazu, gesta nebo projektu ověření, nepotřebujete nic přidat.Kód pro vaši vlastní vlastnost by měl být definován v projektu rozšíření Visual Studio definovaném jako komponenta MEF.Další informace naleznete v tématech Přidávání příkazů a gest do diagramů vrstev a Přidání ověření vlastní architektury do diagramů vrstev.
Definovat vlastní vlastnost
Chcete-li vytvořit vlastní vlastnost, definujte třídu takto:
[Export(typeof(IPropertyExtension))]
public class MyProperty
: PropertyExtension<ILayerElement>
{
// Implement the interface.
}
Můžete definovat vlastnosti v ILayerElement nebo některé z odvozených tříd, mezi které patří:
ILayerModel - model
ILayer - každá vrstva
ILayerDependencyLink - propojení mezi vrstvami
ILayerComment
ILayerCommentLink
Zobrazení vlastních vlastností
Důležité |
---|
Vlastní vlastnosti se zobrazí pouze v případě, že před načtením projektu modelování je otevřen Průzkumník architektury.Bude možná nutné otevřít Průzkumník architektury a poté zastavit a restartovat aplikaci Visual Studio, aby bylo možné zobrazit vlastní vlastnosti.V nabídce Architektura zvolte položku Okna, Průzkumník architektury. |
Chcete-li otestovat vlastní vlastnosti, stiskněte klávesu F5 a spusťte experimentální instanci aplikace Visual Studio.Vytvořte příklad elementu příslušné vrstvy a vyberte jej.Vlastní vlastnosti se zobrazí v okně Vlastnosti.
Příklad
Následující kód je typický vlastní popisovač vlastnosti.Definuje booleovskou vlastnost na modelu vrstvy (ILayerModel), která umožňuje uživateli zadat hodnoty pro vlastní ověřovací metodu.
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;
}
}
}
}