1. 程式人生 > >配置檔案——WebApp.config檔案讀取和修改

配置檔案——WebApp.config檔案讀取和修改

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Xml;

namespace Infrastructure
{
    public class WebConfigHelper
    {
        private Configuration _config;
        private readonly string _configPath;
        private readonly ConfigType _configType;

        /// <summary>
        /// 對應的配置檔案
        /// </summary>
        public Configuration Configuration
        {
            get { return _config; }
            set { _config = value; }
        }

        /// <summary>
        /// 建構函式
        /// </summary>
        public WebConfigHelper()
        {
            _configPath = HttpContext.Current.Request.ApplicationPath;
            Initialize();
        }

        /// <summary>
        /// 建構函式
        /// </summary>
        /// <param name="configPath">.config檔案的位置</param>
        /// <param name="configType">.config檔案的型別,只能是網站配置檔案或者應用程式配置檔案</param>
        public WebConfigHelper(string configPath, ConfigType configType)
        {
            this._configPath = configPath;
            this._configType = configType;
            Initialize();
        }

        //例項化configuration,根據配置檔案型別的不同,分別採取了不同的例項化方法
        private void Initialize()
        {
            //如果是WinForm應用程式的配置檔案
            
            if (_configType == ConfigType.ExeConfig)
            {
                _config = ConfigurationManager.OpenExeConfiguration(_configPath);
            }
            else //WebForm的配置檔案
            {
                _config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(_configPath);
            }
        }

        public string GetValueByKey(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }

        /// <summary>
        /// 新增應用程式配置節點,如果已經存在此節點,則會修改該節點的值
        /// </summary>
        /// <param name="key">節點名稱</param>
        /// <param name="value">節點值</param>
        public void AddAppSetting(string key, string value)
        {
            var appSetting = (AppSettingsSection)_config.GetSection("appSettings");
            if (appSetting.Settings[key] == null) //如果不存在此節點,則新增
            {
                appSetting.Settings.Add(key, value);
            }
            else //如果存在此節點,則修改
            {
                ModifyAppSetting(key, value);
            }
        }

        /// <summary>
        /// 修改應用程式配置節點,如果不存在此節點,則會新增此節點及對應的值
        /// </summary>
        /// <param name="key">節點名稱</param>
        /// <param name="newValue">節點值</param>
        public void ModifyAppSetting(string key, string newValue)
        {
            var appSetting = (AppSettingsSection)_config.GetSection("appSettings");
            if (appSetting.Settings[key] != null) //如果存在此節點,則修改
            {
                appSetting.Settings[key].Value = newValue;
            }
            else //如果不存在此節點,則新增
            {
                AddAppSetting(key, newValue);
            }
        }

        /// <summary>
        /// 新增資料庫連線字串節點,如果已經存在此節點,則會修改該節點的值
        /// </summary>
        /// <param name="key">節點名稱</param>
        /// <param name="connectionString">節點值</param>
        public void AddConnectionString(string key, string connectionString)
        {
            var connectionSetting = (ConnectionStringsSection)_config.GetSection("connectionStrings");
            if (connectionSetting.ConnectionStrings[key] == null) //如果不存在此節點,則新增
            {
                var connectionStringSettings = new ConnectionStringSettings(key, connectionString);
                connectionSetting.ConnectionStrings.Add(connectionStringSettings);
            }
            else //如果存在此節點,則修改
            {
                ModifyConnectionString(key, connectionString);
            }
        }

        /// <summary>
        /// 修改資料庫連線字串節點,如果不存在此節點,則會新增此節點及對應的值
        /// </summary>
        /// <param name="key">節點名稱</param>
        /// <param name="connectionString">節點值</param>
        public void ModifyConnectionString(string key, string connectionString)
        {
            var connectionSetting = (ConnectionStringsSection)_config.GetSection("connectionStrings");
            if (connectionSetting.ConnectionStrings[key] != null) //如果存在此節點,則修改
            {
                connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
            }
            else //如果不存在此節點,則新增
            {
                AddConnectionString(key, connectionString);
            }
        }

        /// <summary>
        /// 儲存所作的修改
        /// </summary>
        public void Save()
        {
            _config.Save();
        }
    }
    public enum ConfigType
    {
        /// <summary>
        /// asp.net網站的config檔案
        /// </summary>
        WebConfig = 1,
        /// <summary>
        /// Windows應用程式的config檔案
        /// </summary>
        ExeConfig = 2
    }
}