2013-02-26 6 views
7

In meinem Beispielcode Ich habe folgendes:Was macht die Attributeusage in MVC4

namespace WebUx.Filters 
{ 
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
    public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute 
    { 
     private static SimpleMembershipInitializer _initializer; 
     private static object _initializerLock = new object(); 
     private static bool _isInitialized; 

     public override void OnActionExecuting(ActionExecutingContext filterContext) 

Kann mir jemand erklären, wie das funktioniert? Wird dies automatisch an jede Klassenmethode oder nur an die Controller-Klassen angehängt? Ich benutze sowohl MVC als auch die Web-API. Wird es sich auch an Web-API-Methoden anhängen?

Antwort

8

AttributeUsage ist nicht spezifisch für MVC. Es beschreibt, wo und wie ein Attribut verwendet werden kann.

In den meisten Fällen (alle?) Erzwingt der Compiler diese Einschränkungen.

Nichts passiert jedoch "magisch"; Sie müssen noch die Klasse/das Mitglied mit dem Attribut dekorieren, um irgendetwas zu tun. Mit anderen Worten, es nicht automatisch auf alle Arten oder Mitglieder angewandt erhalten *

. Siehe auch: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.110).aspx

* Die Inherited Eigenschaft eine sehr begrenzte Menge an Automatisierung bietet. Siehe How does inheritance work for Attributes?.

+0

ich habe einen kleinen Zweifel in der obigen Frage haben wir eine versiegelte Klasse und die Attributeusage hat wahre Eigenschaft geerbt =. Wie kann das funktionieren, wenn versiegelt verhindert, dass die Klasse vererbt wird, bitte erklären Sie .. danke –

+1

@LijinJohn - das Attribut selbst ist versiegelt, aber die 'Inherited' Eigenschaft beschreibt, wie sich das Attribut verhält, wenn es auf * andere * Klassen angewendet wird. Diese anderen Klassen dürfen nicht versiegelt werden. –

0

Es ist genau dasselbe wie in allen anderen Arten von Anwendungen (kein spezielles MVC-Verhalten) - gibt an, wo das bestimmte Attribut verwendet werden kann.

1

Legt fest, wie eine benutzerdefinierte Attributklasse verwendet werden kann. AttributeUsage ist ein Attribut, das auf benutzerdefinierte Attributdefinitionen angewendet werden kann, um zu steuern, wie das neue Attribut angewendet werden kann.

So gibt es dem Compiler einige zusätzliche Informationen über die Attributklasse, die Sie implementieren werden.

Sie haben ein paar gute Beispiele an: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.100).aspx

0

Attributeusage bestimmt, wo und wie das Attribut verwendet werden kann. Ihr Beispiel kann also auf eine Klasse oder eine Methode angewendet werden, aber es kann nur einmal pro Einheit angewendet werden.

Es wird nicht automatisch an Klassen angehängt. Sie müssen dies selbst tun.

Siehe C# Programmieranleitung auf Attributeusage: http://msdn.microsoft.com/en-us/library/tw5zxet9(v=vs.80).aspx