2012-08-29 12 views
6

मैं बस प्रत्येक विशेषता के लिए "प्रबंधक" का उपयोग नहीं करना चाहता हूं और उसके लिए कुछ enum का उपयोग करना चाहता हूं।एंट्री आइटम नाम का उपयोग करें विशेषता पैरामीटर

लेकिन ऐसा लगता है कि यह असंभव है या मैं गलत हूं?

तो मैं

[RequiresRole(HardCodedRoles.Managers.ToString())] 

... 

public enum HardCodedRoles 
{ 
      Administrators, 
      Managers 
} 
+1

आप और अधिक विस्तार किया जा सका इस्तेमाल कर सकते हैं? – Maciej

+0

मैं स्ट्रिंग "AnyRoleName" का उपयोग नहीं करना चाहता हूं और मैं इसके बजाय कुछ आइटम enum से रखना चाहता हूं। लेकिन वीएस एक त्रुटि देता है एक विशेषता तर्क एक निरंतर अभिव्यक्ति, टाइपफॉर्म अभिव्यक्ति या एक विशेषता पैरामीटर प्रकार –

+1

की सरणी अभिव्यक्ति अभिव्यक्ति होना चाहिए यदि हार्डकोडेड रोलस। प्रबंधक एक कॉन्स स्ट्रिंग है, तो यह काम करेगा। दूसरी ओर यदि हार्डकोडेड रोल एक गणना है, तो आपको कन्स्ट्रक्टर को हार्डकोडेड रोल और/या हार्डकोडेड रोल [] को पास करने, प्राधिकरण एट्रिब्यूट को उप-वर्गीकृत करना होगा और अपना स्वयं का कार्यान्वयन करना होगा। – Maciej

उत्तर

11

कैसे एक वर्ग के बजाय एक enum के बारे में , कक्षा को किसी नए से बचने के लिए स्थैतिक बनाना: इसे शामिल करना?

public static class HardCodedRoles 
{ 
    public const string Managers = "Managers"; 
    public const string Administrators = "Administrators"; 
} 

[RequiresRole(HardCodedRoles.Managers)] 
+0

हाँ !!! यह समाधान है !!!! लानत है! यह आसान है!!! :))) –

+1

यह किसी को '[RequiresRole (" fred ")] का उपयोग करने से प्रतिबंधित नहीं करता है। क्या वह पर्याप्त है? –

2

कारण आप देख त्रुटि है क्योंकि ToString() एक विधि है और इस प्रकार मूल्य संकलन समय पर की गणना नहीं की जा सकती है, साथ

[RequiresRole("Managers")] 

को बदलने के लिए प्रयास करें।

यदि आप इसके बजाय [RequiresRole (HardCodedRoles.Managers)] का उपयोग कर सकते हैं, तो आप अपने कोड में ToString कहीं और कर सकते हैं, और यह आपको अपनी कार्यक्षमता प्रदान कर सकता है। इसके लिए आपको string से HardCodedRoles पर अपनी विशेषता का पैरामीटर बदलना होगा।

(मैं कल्पना कर सकते हैं कि एक का उपयोग कर const काम नहीं करेगा, क्योंकि पैरामीटर के प्रकार अभी भी string हो जाएगा, तो इनपुट प्रतिबंधित नहीं किया जाएगा।)

+1

धन्यवाद! क्या आप कृपया किसी भी नमूना प्रदान कर सकते हैं "यदि आप इसके बजाय [RequiresRole (HardCodedRoles.Managers)] का उपयोग कर सकते हैं, तो आप अपने कोड में कहीं और ToString कर सकते हैं, और इससे आपको आवश्यक कार्यक्षमता मिल सकती है।" –

+0

आपको नमूना की क्या आवश्यकता है का? –

+0

अरे नहीं धन्यवाद! मुझे पहले से ही एक जवाब मिल गया है। –

1

ताकि हम जानते हैं कि यह क्या है आप पूरा करने के लिए कोशिश कर रहे हैं आप भी nameof कीवर्ड, यानी .:

[RequiresRole(nameof(HardCodedRoles.Managers))] 
संबंधित मुद्दे