2010-01-29 10 views
5

मैं एक वर्ग एक विशेषता के साथ सजाया है ... [DataEntity("MESSAGE_STAGING", EnableCaching = true, CacheTimeout = 43200)]कुछ आवश्यकता के लिए प्रतिबिंब

का उपयोग कर विशेषताओं मूल्यों को निर्धारित करने के लिए कैसे, मैं Test_Message_Staging को रन टाइम पर यह मान MESSAGE_STAGING बदलना चाहते हैं।

इस लक्ष्य को हासिल करने के लिए सबसे अच्छा संभव तरीका क्या है?

मैं प्रतिबिंब का उपयोग कर सकते हैं, या वहाँ यह करने के लिए किसी भी अन्य तरीका है।

कोड नमूने प्रदान करें।

धन्यवाद SNA

+0

यह है कि आप की कोशिश कर रहे क्या मूल समस्या है चेकआउट करने के लिए है हल? –

उत्तर

8

मैं इसे प्रतिबिंब का उपयोग कर स्थापित गुण संभव है पर विश्वास नहीं है - और यहां तक ​​कि अगर यह होता है, मैं ऐसा करने के लिए नहीं की सलाह देते हैं।

गुण मेटाडाटा जो संकलन समय पर जाना जाता है के लिए इस्तेमाल किया जाना चाहिए। यदि आप मेटाडेटा का अधिक गतिशील रूप चाहते हैं, तो उसे फ़ाइल से लोड करें या इसके बजाय app.config का उपयोग करें ... या कम से कम कुछ विशेष "प्लेसहोल्डर" मान (जैसे | डेटा डायरेक्टरी | कनेक्शन स्ट्रिंग में) जिसे निष्पादन पर हल किया जा सकता है पहर।

+0

आवश्यकता है कि मैं तालिका नाम को किसी भी तरह से बदलना चाहता हूं। एट्रिब्यूट web.config से मान लेने की अनुमति नहीं देगा। पैरामीटर स्थिर होना चाहिए। इसलिए एकमात्र विचार जिसे मैं सोच सकता हूं उसे प्रतिबिंब से वर्ग की विशेषता (डेटा एंटीटी) प्राप्त होती है और इसकी संपत्ति बदलती है। लेकिन क्या यह संभव है – SNA

4

यह प्रतिबिंब के साथ रन-टाइम में संपत्ति अधिक महत्व देते हैं क्योंकि गुण मेटा डेटा विधानसभा में श्रृंखलाबद्ध हैं और उनमें परिवर्तन के विधानसभा को बदलने का मतलब है परिवर्तित करने के लिए संभव नहीं है।

+0

क्या मैं प्रतिबिंब के माध्यम से मेटाडेटा जानकारी बदल सकता हूं? – SNA

+0

प्रतिबिंब एक सामान्य तंत्र है जो सभी प्रकारों के लिए उपलब्ध है क्योंकि इसकी नींव रूट ऑब्जेक्ट क्लास के गेट टाइप विधि में स्थापित है। यह जानकारी किसी प्रकार के लिए लौटाई जाने योग्य नहीं है, जिसमें लक्ष्य प्रकार के संकलन के बाद इसे संशोधित नहीं किया जा सकता है। –

1

तो मैं तुम्हें सही ढंग से समझ, वहाँ प्रतिबिंब में एक संभव तरीका .. कार्यावधि में एक उदाहरण की विशेषता मान बदलने नमूना कोड

 AttributeCollection ac = TypeDescriptor.GetAttributes(yourObj); 

     foreach (var att in ac) 
     { 
      //DataEntityAttribute -- ur attribute class name 
      DataEntityAttribute da = att as DataEntityAttribute ; 
      Console.WriteLine(da.field1); //initially it shows MESSAGE_STAGING 
      da.field1= "Test_Message_Staging"; 
     } 


     //Check the changed value 
     AttributeCollection acc = TypeDescriptor.GetAttributes(yourObj); 

     foreach (var att in ac) 
     { 
      DataEntityAttribute da = att as DataEntityAttribute ; 
      Console.WriteLine(da.field1); //now it shows Test_Message_Staging 
     } 
+1

यह तत्काल वस्तु पर जारी नहीं रहेगा। –

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