2012-02-08 12 views
7

ऐप.कॉन्फिग से सेटिंग्स कब वास्तव में एप्लिकेशन द्वारा पढ़ी जाती हैं?ऐप.कॉन्फिग से सेटिंग्स कब पढ़ी जाती हैं?

मान लीजिए कि मेरे पास विंडोज़ सेवा है और इसके लिए कुछ ऐप सेटिंग्स हैं। कोड में मेरे पास एक तरीका है जहां कुछ सेटिंग का उपयोग किया जाता है। प्रत्येक पुनरावृत्ति में विधि को बुलाया जा रहा है, न केवल हर समय। अगर मैं कॉन्फ़िगरेशन फ़ाइल के माध्यम से सेटिंग मान बदलता हूं, तो क्या मुझे इसके लिए "रीफ्रेश" होने के लिए सेवा को पुनरारंभ करना चाहिए या अगली बार मेरी तरफ से किसी भी बातचीत के बिना इसे स्वीकार किया जाएगा?

उत्तर

5

आपको डिस्क से सीधे नवीनतम मान पढ़ने के लिए ConfigurationManager.RefreshSection विधि पर कॉल करने की आवश्यकता है।

static void Main(string[] args) 
{ 
    while (true) 
    { 
     // There is no need to restart you application to get latest values. 
     // Calling this method forces the reading of the setting directly from the config. 
     ConfigurationManager.RefreshSection("appSettings"); 
     Console.WriteLine(ConfigurationManager.AppSettings["myKey"]); 

     // Or if you're using the Settings class. 
     Properties.Settings.Default.Reload(); 
     Console.WriteLine(Properties.Settings.Default.MyTestSetting); 

     // Sleep to have time to change the setting and verify. 
     Thread.Sleep(10000); 
    } 
} 

मेरे app.config युक्त:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="ConsoleApplication2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <appSettings> 
    <add key="myKey" value="Original Value"/> 
    </appSettings> 
    <userSettings> 
    <ConsoleApplication2.Properties.Settings> 
     <setting name="MyTestSetting" serializeAs="String"> 
     <value>Original Value</value> 
     </setting> 
    </ConsoleApplication2.Properties.Settings> 
    </userSettings> 
</configuration> 

के बाद आप आवेदन शुरू, निर्माण फ़ोल्डर के भीतर app.config खोलें, और यहाँ का परीक्षण करने और अपने प्रश्न का उत्तर प्रदान करने के लिए एक आसान तरीका है "myKey" एपसेटिंग के मूल्य को बदलें। आपको कंसोल पर मुद्रित नया मान दिखाई देगा।

प्रश्न का उत्तर देने के लिए, हाँ, वे पहली बार कैश किए जाते हैं, जिन्हें वे सोचते हैं, और सीधे डिस्क से पढ़ने को मजबूर करने के लिए, आपको अनुभाग को रीफ्रेश करने की आवश्यकता होती है।

+0

और यदि मुझे इस तरह की सेटिंग मिलती है: Properties.Settings.Default.MyValue? – 26071986

+0

Properties.Settings.Default.Reload() का उपयोग कर; – mservidio

+0

@ 26071 9 86 - मैंने सेटिंग क्लास का उपयोग करते समय कोड को प्रतिबिंबित करने के लिए अपना उत्तर अपडेट किया है। – mservidio

1

या तो जब आप इसे कॉन्फ़िगरेशन मैनेजर (ConfigurationManager.GetSection ("x/y") के माध्यम से लोड करते हैं;) या जब आप गुणों तक पहुंचने का प्रयास करते हैं।

क्योंकि जब आप कॉन्फिग प्रबंधक के माध्यम से विन्यास बाहर निकलना वहाँ एक मामूली ग्रे क्षेत्र यहाँ है:

var config = (MyConfigSection)ConfigurationManager.GetSection("MyConfigSection"); 

आप एक विन्यास वस्तु वापस पाने के लिए यदि आप विन्यास अनुभाग प्रकार configurationSections तत्व में कम से प्रदान की है कॉन्फ़िगरेशन फ़ाइल के शीर्ष। यदि आप वास्तव में वास्तविक कॉन्फ़िगरेशन प्रदान नहीं करते हैं तो भी आपको ऑब्जेक्ट वापस मिल जाएगा।

हालांकि यदि आपके पास एक आवश्यक फ़ील्ड है जो सेट नहीं है, तो यह तब तक अपवाद नहीं फेंक देगा जब तक कि आप संपत्ति को कॉल न करें। मैंने अपने कस्टम कॉन्फ़िगरेशन अनुभागों का परीक्षण करने की कोशिश करते हुए यह काम किया है।

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