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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值