获得System.Configure的两种高级用法

来源:互联网 发布:ios 数组初始化 编辑:程序博客网 时间:2024/05/29 23:24

1.最简单的可以用继承IConfigurationSectionHandler来实现读取configure

  public class WebAddresssSectionHandler : IConfigurationSectionHandler    {        public virtual object Create(object parent, object configContext, XmlNode section)        {            WebAddresss webAddresss = new WebAddresss();            if (section != null)            {                foreach (XmlNode item in section.SelectNodes("WebAddress"))                {                    WebAddress webAddress = new WebAddress();                    foreach (XmlAttribute attribute in item.Attributes)                    {                        switch (attribute.Name)                        {                            case "Type":                                webAddress.Type = attribute.Value;                                break;                            case "Name":                                webAddress.Name = attribute.Value;                                break;                            case "Url":                                webAddress.Url = attribute.Value;                                break;                            default:                                break;                        }                    }                    webAddresss[webAddress.Name] = webAddress;                }            }            return webAddresss;        }    }

WebAddress就是数据类:

  public class WebAddress    {        public string Type { get; set; }        public string Name { get; set; }        public string Url { get; set; }    }
对外只要实现一个获取配置的current实例来枚举:

  public class WebAddresss    {        protected Dictionary<string, WebAddress> _webAddresses=new Dictionary<string, WebAddress>();        private static WebAddresss _currentAddresss = null;        public virtual WebAddress this[string name]        {            get { return _webAddresses[name]; }            set { _webAddresses[name] = value; }        }        public static WebAddresss Current        {            get            {                if (_currentAddresss == null)                {                    _currentAddresss= System.Configuration.ConfigurationManager.GetSection("WebAddresss") as WebAddresss;                }                return _currentAddresss;            }        }    }

对应这个web.config就能如下配置:

<configuration>  <configSections>    <section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient" />    <section name="WebAddresss" type="Com.Centaline.Framework.Kernel.Config.WebAddresssSectionHandler,Com.Centaline.Framework.Kernel" />     </configSections>  <!--<WebAddresss>    <WebAddress Name="GetUserByUserName" Url="http://uam.centaline.com:8081/aist-uam-web/rest/userOrgRest/getUserByUsername.json?username={0}" Type="Organization" />    <WebAddress Name="GetMenuChildListByMenuCode" Url="http://uam.centaline.com:8081/aist-uam-web/rest/permission/getMenuChildListByMenuCode.json?code={0}" Type="Permission" />    </WebAddresss>  <WebAdresssConfiguration>

这个高级用法codeproject上早有介绍,https://www.codeproject.com/Articles/10981/Understanding-Section-Handlers-App-config-File


现在主要介绍第二种办法

using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Configuration;using System.Linq;using System.Runtime.InteropServices.WindowsRuntime;using System.Text;using System.Threading.Tasks;using Com.Centaline.Framework.Kernel.Config;namespace Com.Centaline.Framework.Kernel.Config{    public class WebAdresssConfiguration : ConfigurationSection    {        private static WebAddresss _currentAddresss = null;        public static WebAddresss Current        {            get            {                if (_currentAddresss == null)                {                    WebAdresssConfiguration config =                (WebAdresssConfiguration)ConfigurationManager.GetSection("WebAdresssConfiguration") as                    WebAdresssConfiguration;                    WebAddresss webAddresss = new WebAddresss();                                       for (int index = 0; index < config.UrlElements.Count; index++)                    {                        WebAddress webAddress = new WebAddress();                        webAddress.Name = config.UrlElements[index].Name;                        webAddress.Type = config.UrlElements[index].Type;                        if(string.IsNullOrEmpty(config.UrlElements[index].Url))                        switch (webAddress.Name)                        {                            case "FindOrgZTreeList":                                webAddress.Url = config.UrlElements[index].FindOrgZTreeList;                                break;                                                       case "HasPermission":                                webAddress.Url = config.UrlElements[index].HasPermission;                                break;                        }                        else                        {                            webAddress.Url = config.UrlElements[index].Url;                        }                        webAddresss[config.UrlElements[index].Name] = webAddress;                    }                    _currentAddresss = webAddresss;                }                return _currentAddresss;            }        }        private static WebAdresssConfiguration setting;        public static WebAdresssConfiguration Setting        {            get            {                if (setting == null)                    setting = (WebAdresssConfiguration)ConfigurationManager.GetSection("WebAdresssConfiguration");                return setting;            }        }        [ConfigurationProperty("WebAddresss")]        [ConfigurationCollection(typeof(WebAddressConfigurationElementCollection), AddItemName = "WebAddress", ClearItemsName = "clearUrls", RemoveItemName = "RemoveUrl")]        public WebAddressConfigurationElementCollection UrlElements        {            get { return (WebAddressConfigurationElementCollection)this["WebAddresss"]; }            set { this["WebAddresss"] = value; }        }        //[ConfigurationProperty("DomainName", DefaultValue = "http://uam.centaline.com:8081/aist-uam-web/rest", IsRequired = false)]        //public string DomainName        //{        //    get { return (string)this["DomainName"]; }        //    set { this["DomainName"] = value; }        //}    }    public class WebAddressConfigurationElement : ConfigurationElement    // 集合中的每个元素    {        public static string WebAddress = "";        [ConfigurationProperty("Name", DefaultValue = "", IsRequired = true)]        public string Name        {            get            {                WebAddress = (string)this["Name"];                return (string)this["Name"];            }            set { this["Name"] = value; }        }        [ConfigurationProperty("Type", DefaultValue = "", IsRequired = true)]        public string Type        {            get { return (string)this["Type"]; }            set { this["Type"] = value; }        }        [ConfigurationProperty("Url", DefaultValue = "", IsRequired = true)]        public string Url        {            get { return (string)this["Url"]; }            set { this["Url"] = value; }        }        [ConfigurationProperty("DomainOrg", DefaultValue = "http://uam.centaline.com:8081/aist-uam-web/rest/userOrgRest", IsRequired = false)]        public string DomainOrg        {            get { return (string)this["DomainOrg"]; }            set { this["DomainOrg"] = value; }        }        [ConfigurationProperty("DomainPermission", DefaultValue = "http://uam.centaline.com:8081/aist-uam-web/rest/permission", IsRequired = false)]        public string DomainPermission        {            get { return (string)this["DomainPermission"]; }            set { this["DomainPermission"] = value; }        }             [ConfigurationProperty("FindOrgZTreeList", DefaultValue = "#DOMAIN#/findOrgZTreeList.json?parentId={0}", IsRequired = false)]        public string FindOrgZTreeList        {            get { return ((string)this["FindOrgZTreeList"]).Replace("#DOMAIN#", (string)this["DomainOrg"]); }            set { this["FindOrgZTreeList"] = value; }        }        [ConfigurationProperty("HasPermission", DefaultValue = "#DOMAIN#/hasPermission.json?jobId={0}&resourceCode={1}", IsRequired = false)]        public string HasPermission        {            get { return ((string)this["HasPermission"]).Replace("#DOMAIN#", (string)this["DomainPermission"]); }            set { this["HasPermission"] = value; }        }         }    public class WebAddressConfigurationElementCollection : ConfigurationElementCollection    {        protected override ConfigurationElement CreateNewElement()        {            return new WebAddressConfigurationElement();        }        protected override object GetElementKey(ConfigurationElement element)        {            return ((WebAddressConfigurationElement)element).Name;        }        public WebAddressConfigurationElement this[int index]        {            get { return (WebAddressConfigurationElement)BaseGet(index); }            set            {                if (BaseGet(index) != null)                {                    BaseRemoveAt(index);                }                BaseAdd(index, value);            }        }        public WebAddressConfigurationElement this[string name]        {            get { return (WebAddressConfigurationElement)BaseGet(name); }                   }        public void Add(WebAddressConfigurationElement webAddressConfigurationElement)        {            BaseAdd(webAddressConfigurationElement);        }        public void Clear()        {            BaseClear();        }        public void Remove(WebAddressConfigurationElement serviceConfig)        {            BaseRemove(serviceConfig.Name);        }        public void RemoveAt(int index)        {            BaseRemoveAt(index);        }        public void Remove(string name)        {            BaseRemove(name);        }          }}

直接把默认值做成ConfigureProperty然后根据不同的来塞数据,这样就有默认值了,Url不给也能自动配置。


<configuration>  <configSections>    <section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient" />            <section name="WebAdresssConfiguration" type="Com.Centaline.Framework.Kernel.Config.WebAdresssConfiguration, Com.Centaline.Framework.Kernel"/>     </configSections>   <WebAdresssConfiguration>    <WebAddresss>            <WebAddress Name="FindOrgZTreeList" Url="http://uam.centaline.com:8081/aist-uam-web/rest/userOrgRest/findOrgZTreeList.json?parentId={0}" Type="Organization" />          <WebAddress Name="HasPermission" Url="http://uam.centaline.com:8081/aist-uam-web/rest/permission/hasPermission.json?jobId={0}&resourceCode={1}" Type="Permission" />       </WebAddresss>  </WebAdresssConfiguration>

其实codeproject上也早有介绍,发觉牛人真多

https://www.codeproject.com/articles/20548/creating-a-custom-configuration-section-in-c

0 0
原创粉丝点击