获得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
- 获得System.Configure的两种高级用法
- js高级编程中命名空间的两种用法
- The GNU configure and build system-configure的详细介绍
- The GNU configure and build system-configure的详细介绍
- 两种获得WMI信息的方式
- java获得键盘输入的两种方法
- Android获得屏幕分辨率的两种方法
- 获得临时文件的两种途径
- java获得键盘输入的两种方法
- Android获得屏幕分辨率的两种方法
- hibernate 获得session的两种方式
- SessionFactory,Session,Configure的用法
- ./configure 的配置和用法
- ./configure 的配置和用法
- typedef 的两种用法
- assert 的两种用法
- DBLookupCombox的两种用法
- log4J的两种用法
- sql 第九章
- 安装caffe过程记录
- LeetCode之路——Add Two Numbers
- Android实现竖直显示的TextView【转载】
- Android开发环境搭建与HelloWord
- 获得System.Configure的两种高级用法
- Spring源码分析----IoC容器其他特性的设计与实现
- 使用数组实现链表
- libgo编译
- Android的热修复技术
- 【HPU-oj】-Triangles(锐角三角形个数,数学,思维)
- 一种Android客户端架构设计分享
- VOC数据集制作
- C++primer 第二章笔记 初稿