क्या .NET के कॉन्फ़िगरेशन API के साथ कॉन्फ़िगरेशन गुणों के रूप में अपरिवर्तनीय प्रकारों का उपयोग करना संभव है?विन्यास गुणों के रूप में अपरिवर्तनीय प्रकार
चलो कहते हैं कि मैं एक अपरिवर्तनीय प्रकार MyClass कहा जाता है दो:
public class ImmutableClass
{
private readonly int value;
public ImmutableClass(int value)
{
this.value = value;
}
public int Value
{
get { return this.value; }
}
}
मैं एक ConfigurationSection में एक विन्यास संपत्ति के रूप में इस प्रकार का उपयोग करना चाहते हैं:
public class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("foo")]
public ImmutableClass Foo
{
get { return (ImmutableClass)base["foo"]; }
set { base["foo"] = value; }
}
}
जब मैं ऐसा करते हैं, मैं यह कर सकते हैं MyConfigurationSection को व्यवस्थित और deserialize नहीं है क्योंकि यह इस अपवाद फेंकता है:
सिस्टम। कॉन्फिगुराटी पर। कॉन्फ़िगरेशनइरर्स अपवाद: संपत्ति 'मानदंड' का मान स्ट्रिंग में परिवर्तित नहीं किया जा सकता है। त्रुटि यह है: एक कनवर्टर खोजने में असमर्थ जो 'FindCriterion' प्रकार के गुण 'मानदंड' के लिए स्ट्रिंग से रूपांतरण/समर्थन का समर्थन करता है।
अगर मैं ConfigurationElement से ImmutableClass निकाले जाते हैं, मैं जब मैं क्रमानुसार और विन्यास खंड deserialize करने की कोशिश इस अपवाद प्राप्त करें:
System.Reflection.TargetInvocationException: अपवाद एक मंगलाचरण का लक्ष्य द्वारा दिया गया है । ---> System.Reflection.TargetInvocationException: अपवाद के लक्ष्य से अपवाद फेंक दिया गया है। ---> System.MissingMethodException: इस ऑब्जेक्ट के लिए परिभाषित कोई पैरामीटर रहित कन्स्ट्रक्टर नहीं है।
मेरे पास इम्यूटेबल क्लास पर पूर्ण नियंत्रण है, इसलिए मैं जो भी इंटरफेस की आवश्यकता है उसे कार्यान्वित कर सकता हूं।
क्या कोई तरीका है कि मैं कॉन्फ़िगरेशन एपीआई में हुक कर सकता हूं ताकि इम्यूटेबल क्लास इस तरह से उपयोग किया जा सके?
+1। धन्यवाद, यह ठीक काम करता है। मैं मानता हूं कि ज्यादातर मामलों में, प्रवाह के साथ चलना आसान होगा, और यह भी मैं आमतौर पर करता हूं, लेकिन यह एक विशेष मामला था ... –
जानना अच्छा है ... मैं वास्तव में अपरिवर्तनीय प्रकारों और xaml के साथ प्रयोग कर रहा हूं क्रमबद्धता। मुझे आशा है कि टाइप कन्वर्टर्स मेरे लिए भी काम करेंगे! – Will