2009-07-24 11 views
5

संभव डुप्लिकेट:
Why does my .NET Attribute not perform an action?सी # कोड निष्पादित अंदर कस्टम विशेषता

हाय,

यह एक बहुत ही गूंगा सवाल soundlike सकता है और मैं नहीं जानता कि क्या संभव यहाँ सभी के रूप में है नेट पर "कस्टम विशेषता" ट्यूटोरियल काफी समान हैं और वे जो भी करना चाहते हैं उसे संबोधित नहीं करते हैं। मैंने वहां कुछ कोड देखा है जहां विशेषता वर्गों के अंदर कोड लिखा गया है, उदाहरण: Logging with ASP.NET MVC Action Filters और मैं सोच रहा हूं कि यह कोड कभी निष्पादित कैसे किया जाता है।

मैं उदाहरण के लिए है, तो निम्न कोड:

public class Test 
{ 
    [RestrictedAttribute("RegisteredMember")] 
    public void DoSomething() 
    { 
     //this code can only be executed if the logged-in user 
     //is a member of the RegisteredMember group 
    } 
} 

तब कस्टम विशेषता RestrictedAttribute कुछ इस तरह होगा:

[AttributeUsage(AttributeTargets.Method)] 
public class RestrictedAttribute : System.Attribute 
{ 
    /// <summary> 
    /// Make this code restricted to users with a required role 
    /// </summary> 
    /// <param name="requiredRole">The role required to execute this method</param> 
    public RestrictedAttribute(string requiredRole) 
    { 
     //validate if member is in role, else throw exception 
     throw new MemberNotInRoleException(requiredRole); 
    } 
    public new string ToString() { 
     return "Access needs to be granted"; 
    } 

} 

अब समस्या यह है कि मैं MemberNotInRoleException नहीं मिल सकता है जब मैं टेस्ट निष्पादित करता हूं तो फेंक दिया जाता है। कुछ() विधि।

शायद मैं केवल कस्टम विशेषताओं की पूरी अवधारणा को याद कर रहा हूं, समझाने के लिए स्वतंत्र महसूस करता हूं।

+0

डुपे: http://stackoverflow.com/questions/1164978/c-attribute-actions-and-instance-values ​​ –

+2

आपको ActionFilterAttribute से अपनी विशेषता का उत्तराधिकारी होना चाहिए और इसे एमएसी में कुछ करने के लिए OnActionExecuting विधि को ओवरराइड करना होगा । –

+1

मुझे नहीं लगता कि यह एक सटीक डुप्ली है, क्योंकि यह एमसीवी व्यवहार है जो इस मुद्दे को ढका रहा है, मेहरदाद के संदर्भ पते सीधे विशेषता देते हैं और एक अच्छी कॉल है, लेकिन यहां एक नज़र है जो एमवीसी लोगों को क्रॉस काटने का प्रयास करने में मदद कर सकता है उनके समाधानों में चिंताओं, जैसे सत्यापन, और जेएसओएन/एक्सएमएल क्रमबद्धता। –

उत्तर

2

जिस तरह से आप गुणों को देख रहे हैं, पहले ठीक लगता है, लेकिन फिर से सोचें। आप वास्तव में क्या कर रहे हैं अपनी कक्षा को सजा रहे हैं या जो कुछ भी उसके साथ काम करता है वह निर्णय ले सकता है, न कि कक्षा स्वयं निर्णय ले सकती है। एमवीसी में एक्शनफिल्टर विशेषताओं का उपयोग करने के तरीके से यह मेरे लिए क्लाउड किया गया था, जो ऐसा लगता है कि वे कुछ करते हैं, लेकिन यह ढांचा है जो घटनाओं को चुनता है और तदनुसार विशेषता का उपयोग करता है। मैं आम तौर पर मेरे प्रोग्राम के साथ काम करने के लिए टिप्पणियों के रूप में विशेषताओं के बारे में सोचने की कोशिश करता हूं।

संबंधित मुद्दे