यहाँ एक मानक परिदृश्य है:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
समस्या यह है, मैं पूरी तरह से निश्चित नहीं हूं कि कौन सा अपवाद SomeStandardException
होना चाहिए।
मैंने 3.5 फ्रेमवर्क का उपयोग किया और दो संभावित उम्मीदवारों को पाया: ConfigurationException
और ConfigurationErrorsException
।
System.Configuration.ConfigurationException
कॉन्फ़िगरेशन सिस्टम त्रुटि होने पर अपवाद को फेंक दिया जाता है।
टिप्पणियों
ConfigurationException
यदि एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल में डेटा को पढ़ने या लिखने का प्रयास करता है, लेकिन अपवाद असफल है, लेकिन असफल है। इसके कुछ संभावित कारणों में कॉन्फ़िगरेशन फ़ाइल में विकृत एक्सएमएल, फ़ाइल अनुमति मुद्दे और कॉन्फ़िगरेशन गुण शामिल हो सकते हैं जो मान्य नहीं हैं।ध्यान दें:
ConfigurationException
वस्तु पिछली संगतता के लिए बनाए रखा है।ConfigurationErrorsException
वस्तु विन्यास प्रणाली के लिए यह बदल देता है।
यह अपवाद वास्तव में मुझे क्या चाहिए, के लिए एकदम सही लगता है, लेकिन यह अप्रचलित चिह्नित किया गया है, इसलिए, अथाए पर ixnay।
यह हमें अच्छी तरह से हैरान कर देता है ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
वर्तमान मान EnableSessionState मानों में से एक नहीं है।
जैसा कि आप देख सकते हैं, इसका प्रलेखन पूरी तरह से बेकार है। (यह स्थानीय और ऑनलाइन मदद दोनों में इस तरह से है।) कक्षा की एक परीक्षा से ही पता चलता है कि मैं जो चाहता हूं, उसके लिए यह भारी है।
संक्षेप में, मुझे एक मानक अपवाद की आवश्यकता होती है जिसे तब फेंक दिया जाना चाहिए जब कोई एप्लिकेशन कॉन्फ़िगरेशन सेटिंग अनुपलब्ध हो या जिसमें कोई अमान्य मान हो। आपको लगता है कि अनुप्रयोगों के उपयोग के लिए फ्रेमवर्क में इस तरह का अपवाद बेक किया गया था। (यह स्पष्ट रूप से किया गया था, लेकिन यह अप्रचलित के रूप में चिह्नित किया गया था, और इसे बहुत अधिक दायरे में बदल दिया गया था ।)
क्या समाधान, यदि कोई हो, क्या आप लोग इसके लिए उपयोग कर रहे हैं, और क्या मैं इसे चूसना और इसके लिए अपना स्वयं का अपवाद रोल करने जा रहा हूं?
एडेंडा को संपादित करें
कुछ ने पूछा है कि मैं डिफ़ॉल्ट मान प्रदान कर सकता हूं या नहीं, और जारी रख सकता हूं। कुछ मामलों में, हाँ, और उन मामलों में, अपवाद नहीं फेंका जाएगा। हालाँकि, कुछ सेटिंग्स के लिए, यह लागू नहीं होगा। उदाहरण के लिए: डेटाबेस सर्वर नाम और क्रेडेंशियल्स, प्रमाणीकरण सर्वर, और स्थापित थर्ड पार्टी एप्लिकेशन को पथ।
यह भी ध्यान देने योग्य है कि जिस एप्लिकेशन पर मैं मुख्य रूप से काम कर रहा हूं, वह बैच मोड में चलने वाला कंसोल एप्लिकेशन है, और मैं चाहता हूं कि यह एक अपवाद को फेंक दे जो मुख्य विधि द्वारा पकड़ा गया हो और उचित रूप से लॉग इन किया हो अगर बात उचित रूप से कॉन्फ़िगर नहीं की गई है। (यह विरासत कोड है जो मुझे विरासत में मिला है, और वर्तमान में बस सब कुछ आड़ू मानता है ।)
System.Configuration.ConfigurationErrorsException
अद्यतन किया गया है।