• 配置文件相关的代码


    1、配置文件监听

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    using System.IO;
    
    namespace CSharpStudy
    {
        public sealed class ConfigMonitor
        {
            /// <summary>
            /// file path
            /// </summary>
            private static string filePath = string.Empty;
    
            /// <summary>
            /// file map
            /// </summary>
            private static ExeConfigurationFileMap configFileMap;
    
            /// <summary>
            /// constructor 
            /// </summary>
            static ConfigMonitor()
            {
                Console.WriteLine("constructor...");
                MonitorConfigFile();
                InitConfigInfo();
            }
    
            /// <summary>
            /// after change config delegate
            /// </summary>
            public delegate void AfterConfigModifyEvent();
    
            /// <summary>
            /// after change config event
            /// </summary>
            public static event AfterConfigModifyEvent afterConfigModifyEvent;
    
            /// <summary>
            /// config object
            /// </summary>
            public static Configuration Config
            {
                get;
                set;
            }
    
            /// <summary>
            /// monitor config file
            /// </summary>
            public static void MonitorConfigFile()
            {
                Console.WriteLine("MonitorConfigFile...");
                // don't throw exception 
                try
                {
                    FileSystemWatcher fileWatcher = new FileSystemWatcher();
                    fileWatcher.Path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                    fileWatcher.Filter = "ParamSettings.config";
    
                    // add event handlers
                    fileWatcher.Changed += new FileSystemEventHandler(OnChanged);
                    fileWatcher.Created += new FileSystemEventHandler(OnChanged);
                    fileWatcher.Deleted += new FileSystemEventHandler(OnChanged);
                    fileWatcher.Renamed += new RenamedEventHandler(OnChanged);
    
                    fileWatcher.EnableRaisingEvents = true;
                }
                catch
                {
                }
            }
    
            public static void OnChanged(object source, FileSystemEventArgs e)
            {
                InitConfigInfo();
                RaiseEvent();
            }
    
            /// <summary>
            /// init all config info
            /// </summary>
            public static void InitConfigInfo()
            {
                Console.WriteLine("InitConfigInfo...");
    
                try
                {
                    // don't throw exception
                    filePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\ParamSettings.config";
                    configFileMap = new ExeConfigurationFileMap();
                    configFileMap.ExeConfigFilename = filePath;
                    Config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
                }
                catch
                {
                }
            }
    
            /// <summary>
            /// raise event 
            /// </summary>
            private static void RaiseEvent()
            {
                Console.WriteLine("RaiseEvent...");
    
                if (afterConfigModifyEvent != null)
                {
                    afterConfigModifyEvent();
                }
            }
        }
    }

    2、SettingsFactory

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharpStudy
    {
        public class SettingsFactory
        {
            static SettingsFactory()
            {
                ConfigMonitor.MonitorConfigFile();
            }
    
            public static string ApplicationName
            {
                get
                {
                    return GetAppSetting("ApplicationName");
                }
            }
    
    
            private static string GetAppSetting(string key)
            {
                return ConfigMonitor.Config.AppSettings.Settings[key].Value;
            }
        }
    }

    3、测试代码

         public static void TestConfigFile()
            {
                while (true)
                {
                    string str = Console.ReadLine();
                    if (str == "-1")
                    {
                        break;
                    }
    
                    Console.WriteLine(SettingsFactory.ApplicationName);
                }
            }

    4、运行截图

    4.1 初始化

    说明:

      在输入回车后,打印SettingsFactory.ApplicationName信息,

      第一、SettingsFactory构造函数初始化

      (1)、ConfigMonitor构造函数初始化,执行构造函数里面的方法

        打印:

        contructor...

        MonitorConfigFile...

          InitConfigInfo...

      (2)、执行ConfigMonitor.MonitorConfigFile方法

        打印:MonitorConfigFile...

        第二、执行SettingsFactory.ApplicationName方法,打印:CSharpStudy

    4.2 使用值

      

      说明:再输入一次回车,结果打印:CSharpStudy。静态构造器,只在第一次使用该类的时候进行初始化。

    4.3 程序运行时修改配置文件

    找到项目所在目录下的:binDebugParamSettings.config配置文件,

    将ApplicationName的Value修改为:测试项目

    执行了四次OnChanged方法。

    输入回车后

     5、配置文件ParamSettings.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="ApplicationName" value="CSharpStudy"/>
      </appSettings>
    </configuration>
  • 相关阅读:
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    Oracle中如何插入特殊字符: &amp;amp; 和 &amp;#39; (多种解决方案)
    oracle学习链接
    ORACLE中的游标Cursor总结
    SVN使用教程总结
    SVN使用教程之-分支/标记 合并 subeclipse
    weblogic启动 web应用ssh关闭 nohup命令
    Oracle 学习之:ASCII,CHR函数的作用和用法
    Oracle数据库单表循环提取输出
    设计模式-七大原则
  • 原文地址:https://www.cnblogs.com/tianxue/p/4312835.html
Copyright © 2020-2023  润新知