In base alle vostre esigenze, come opzione è possibile considerare l'utilizzo di:
Gli attributi che è possibile registrare in questo modo non sono in realtà attribuisce la classe, ma la maggior parte dei quadri usare come gli attributi nativi della tua classe.
Se si desidera aggiungere attributi di annotazioni di dati, in particolare nel progetto ASP.NET MVC
, questo strumento sarà utile.
Anche per altri framework come Windows Forms
che non supportano MetadataTypeAttribute
è possibile aggiungere semplicemente il supporto utilizzando AssociatedMetadataTypeTypeDescriptionProvider
.
La soluzione non è limitata agli attributi delle annotazioni di dati ed è possibile utilizzare tutti i tipi di attributi significativi per le proprie librerie e framework.
Come definire attributi aggiuntivi?
È possibile creare una classe di metadati che contiene proprietà della classe originale decorate con attributi appropriati e quindi decorare la classe parziale mediante l'attributo MetadataType
e introdurre la classe di metadati per la classe originale.
Come visualizzare l'impatto di tali attributi?
I quadri come ASP.NET MVC
utilizzano quegli attributi come sono definiti nella classe originale.
Inoltre, è possibile registrare AssociatedMetadataTypeTypeDescriptionProvider
come provider per il tipo originale per altri framework o componenti che potrebbero voler utilizzare TypeDescriptor
per ottenere informazioni sul tipo.
Sono davvero i miei attributi di classe?
Si prega di prestare attenzione, in questo modo, gli attributi in realtà non appartengono alla classe originale, ma per la maggior parte dei quadri, come ASP.NET MVC
o Windows Forms
che utilizzano TypeDescriptor
per ottenere informazioni sui tipi, si comportano come la classe attributi originali.
Quindi, se si desidera ottenere attributi per una proprietà utilizzando la riflessione, non è possibile vederli, ma se si utilizza il meccanismo TypeDescriptor
, è possibile vederli.
Un esempio
Hazaa Classe:
public partial class Hazaa
{
public int Shazoo { get; set; }
}
HazaaMetadata Classe
[MetadataType(typeof(HazaaMetadata))]
public partial class Hazaa
{
}
public class HazaaMetadata
{
[DisplayName("Shazoo Name")]
public int Shazoo { get; set; }
}
ASP.NET MVC Uso
non è necessario fare altro per rendere operativo il DisplayName
, è possibile utilizzare semplicemente Html.Labelfor
o Html.DisplayNameForm
per vedere l'impatto. Mostrerà "Nome Shazoo" come testo dell'etichetta.
Windows Form Uso
Alcuni dove nella vostra applicazione (come carico della forma, principale, ...) registrare il provider in questo modo:
var provider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Hazaa));
TypeDescriptor.AddProvider(provider, typeof(Hazaa));
E come risultato, si vedrà PropertyGrid
e DataGridView
utilizzano "Nome Shazoo" come didascalia per la proprietà e il titolo della colonna.
(1) Darn ... (2) Membro parziale **? Come hai sicuramente capito, la prima parte è autogenerata. Posso forzarlo a essere parziale dal file di cui sono in controllo ** senza che sia stata modificata l'autogenerazione? (3) +1 per brevità. –
Dubbi, ci sono requisiti di sintassi speciali per l'implementazione di un membro parziale, come dover specificare la parola chiave 'partial' e nessun modificatore di accesso. –