当前位置: 首页 > news >正文

湖南建设局网站高端食品品牌排行榜前十名

湖南建设局网站,高端食品品牌排行榜前十名,怎么把网站横幅做很大,前端角度实现网站首页加载慢优化appSettings太简单#xff0c;为每个程序自定义配置节点太复杂#xff0c;因此要解决app.configweb.config自定义配置的复用问题。 1.读取不依赖SectionName,根节点可以定义为任何名称。 2.足够简单#xff0c;配置项采用name value的形式#xff1b;足够复杂#xf…appSettings太简单为每个程序自定义配置节点太复杂因此要解决app.configweb.config自定义配置的复用问题。 1.读取不依赖SectionName,根节点可以定义为任何名称。 2.足够简单配置项采用name value的形式足够复杂采用树型结构每个节点都可以有多个配置项和子节点。 3.使用简单采用路径简化配置项的读取。如: config.Getstring(root.sub.item-test)。 一、调用方式 1.配置文件 ?xml version1.0 encodingutf-8 ? configurationconfigSectionssection namenode typeOnion.Configuration.AppConfig.ConfigSection,Onion.Configuration //configSectionsnode namerootitemsitem nameversion value1.0.0.1 //itemsnodesnode nameruntimeitemsitem namedebug valuefalse /item nameioc valueIoC.Contianer.StructureMapIoC //items/nodenode nameuploaditemsitem nameauth valuetrue /item namepath value~/upload /item nameurl value~/Upload/Index //items/nodenode namecaptchaitemsitem nametimeout value3000 /item nameurl value~/Captcha/Index //items/nodenode nameoauth2itemsitem namedisabled value false /item namecallback value /Home/ExternalLoginCallBack?ProviderName //itemsnodesnode nameqqclientitemsitem namedisabled valuefalse /item namemethod valueget /item namekey value9233e24d /item namesecret value1ac35907-7cfa-4079-975c-959b98d23a95 //items/nodenode nameweiboclientitemsitem namedisabled valuetrue /item namemethod valuepost /item namekey value0cdea8f3 /item namesecret valuedc679dbb-7e75-44f7-a99e-5359259fc94b //items/node/nodes/node/nodes/node /configuration 2.调用代码 [Fact]public void Tests(){var config new AppConfigAdapter();Assert.True(config.Getstring(version) 1.0.0.1);Assert.True(config.Getbool(runtime.debug) false);Assert.True(config.Getstring(runtime.ioc) IoC.Contianer.StructureMapIoC);Assert.True(config.Getbool(upload.auth) true);Assert.True(config.Getstring(upload.path) ~/upload);Assert.True(config.Getstring(upload.url) ~/Upload/Index);Assert.True(config.Getint(captcha.timeout) 3000);Assert.True(config.Getstring(captcha.url) ~/Captcha/Index);Assert.True(config.Getbool(oauth2.disabled) false);Assert.True(config.Getstring(oauth2.callback) /Home/ExternalLoginCallBack?ProviderName);Assert.True(config.GetNode(oauth2).Nodes.Any(o o.GetItembool(disabled)));foreach (var node in config.GetNode(oauth2).Nodes){if (node.Name qqclient){Assert.True(node.GetItembool(disabled) false);Assert.True(node.GetItemstring(method) get);Assert.True(node.GetItemstring(key) 9233e24d);Assert.True(node.GetItemstring(secret) 1ac35907-7cfa-4079-975c-959b98d23a95);}else if (node.Name weiboclient){Assert.True(node.GetItembool(disabled) true);Assert.True(node.GetItemstring(method) post);Assert.True(node.GetItemstring(key) 0cdea8f3);Assert.True(node.GetItemstring(secret) dc679dbb-7e75-44f7-a99e-5359259fc94b);}}} 二、接口定义 1.配置项定义IItem接口定义最基础的配置项只包含Name和Value属性。 public interface IItem {string Name { get; set; }string Value { get; set; } } 2.配置节点定义INode接口定义了配置节点的树形结构 public interface INode {string Name { get; set; }IEnumerableIItem Items { get; set; }IEnumerableINode Nodes { get; set; }string GetItem(string itemName);T GetItemT(string itemName); }   3.读取接口定义IConfig接口定义了配置节点和配置项的读取 public interface IConfig {INode GetNode(string nodeName);string Get(string nameOrPath);T GetT(string nameOrPath); } 以上3个接口定义了所有的逻辑。 三、接口实现 1.自定义ItemElementIItem和ItemElementCollection用于实现单个节点的配置项读取。 public class ItemElement : ConfigurationElement, IItem{[ConfigurationProperty(name, IsRequired true)]public string Name{get { return Convert.ToString(this[name]); }set { this[name] value; }}[ConfigurationProperty(value, IsRequired true)]public string Value{get { return Convert.ToString(this[value]); }set { this[value] value; }}}public class ItemElementCollection : ConfigurationElementCollection, IEnumerableIItem{protected override ConfigurationElement CreateNewElement(){return new ItemElement();}protected override object GetElementKey(ConfigurationElement element){return ((ItemElement)element).Name;}public new IEnumeratorIItem GetEnumerator(){for (int i 0; i base.Count; i){yield return base.BaseGet(i) as IItem;}}} View Code   2.自定义NodeElementINode和NodeElementCollection用于实现节点树功能。 public class NodeElement : ConfigurationElement, INode{[ConfigurationProperty(name, IsRequired true)]public string Name{get { return Convert.ToString(this[name]); }set { this[name] value; }}[ConfigurationProperty(items)][ConfigurationCollection(typeof(ItemElementCollection), AddItemName item)]public ItemElementCollection ItemElements{get{return this[items] as ItemElementCollection;}set { this[items] value; }}[ConfigurationProperty(nodes)][ConfigurationCollection(typeof(NodeElementCollection), AddItemName node)]public NodeElementCollection NodeElements{get{return this[nodes] as NodeElementCollection;}set { this[nodes] value; }}public IEnumerableIItem Items{get{return this[items] as ItemElementCollection;}set { this[items] value; }}public IEnumerableINode Nodes{get{return this[nodes] as NodeElementCollection;}set { this[nodes] value; }}public string GetItem(string itemName){return this.Items.FirstOrDefault(o o.Name itemName)?.Value;}public T GetItemT(string itemName){return (T)Convert.ChangeType(this.GetItem(itemName), typeof(T));}}public class NodeElementCollection : ConfigurationElementCollection, IEnumerableINode{protected override ConfigurationElement CreateNewElement(){return new NodeElement();}protected override object GetElementKey(ConfigurationElement element){return ((NodeElement)element).Name;}public new IEnumeratorINode GetEnumerator(){for (int i 0; i base.Count; i){yield return base.BaseGet(i) as INode;}}} View Code   3.自定义ConfigSection实现配置节点和配置项读取。 public class ConfigSection : ConfigurationSection, INode{[ConfigurationProperty(name, IsRequired true)]public string Name{get { return Convert.ToString(this[name]); }set { this[name] value; }}[ConfigurationProperty(items)][ConfigurationCollection(typeof(ItemElementCollection), AddItemName item)]public ItemElementCollection ItemElements{get{return this[items] as ItemElementCollection;}set { this[items] value; }}[ConfigurationProperty(nodes)][ConfigurationCollection(typeof(NodeElementCollection), AddItemName node)]public NodeElementCollection NodeElements{get{return (NodeElementCollection)this[nodes];}set { this[nodes] value; }}public IEnumerableIItem Items{get{return this[items] as ItemElementCollection;}set { this[items] value; }}public IEnumerableINode Nodes{get{return (NodeElementCollection)this[nodes];}set { this[nodes] value; }}public string GetItem(string itemName){return this.Items.FirstOrDefault(o o.Name itemName)?.Value;}public T GetItemT(string itemName){return (T)Convert.ChangeType(this.GetItem(itemName), typeof(T));}} View Code   4.自定义AppConfigAdapter实现IConfig接口。 public class AppConfigAdapter : IConfig{private INode _section;public AppConfigAdapter(){var sectionName (HostingEnvironment.IsHosted ? WebConfigurationManager.OpenWebConfiguration(~) : ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)).Sections.CastConfigurationSection().FirstOrDefault(o o.SectionInformation.Type.IndexOf(Onion.Configuration.AppConfig.ConfigSection) ! -1).SectionInformation.Name ?? Node;_section (INode)ConfigurationManager.GetSection(sectionName);}public INode GetNode(string nodeName){return this.GetNode(nodeName, this._section);}public string Get(string nameOrPath){if (nameOrPath.IndexOf(.) -1){return this._section.Items.FirstOrDefault(o o.Name nameOrPath)?.Value;}var nodeItemPath nameOrPath.Split(.);var node this.GetNode(nodeItemPath.FirstOrDefault());var nodeNameList nodeItemPath.Skip(1).Take(nodeItemPath.Length - 2);if (node ! null){foreach (var item in nodeNameList){if (node.Nodes.Any(o o.Name item)){node node.Nodes.FirstOrDefault(o o.Name item);}else{throw new System.ArgumentException(string.Format(node name {0} error, item));}}return node.Items.FirstOrDefault(o o.Name nodeItemPath.LastOrDefault()).Value;}return null;}public T GetT(string nameOrPath){var value this.Get(nameOrPath);return (T)Convert.ChangeType(value, typeof(T));}#region privateprivate INode GetNode(string nodeName, INode node){INode result null;if (node.Name nodeName){return node;}else if (node.Nodes.Any()){foreach (var item in node.Nodes){result GetNode(nodeName, item);if (result ! null){break;}}}return result;}#endregion private} View Code   Nuget:https://www.nuget.org/packages/Onion.Configuration/转载于:https://www.cnblogs.com/easygame/p/5051592.html
http://www.pierceye.com/news/76221/

相关文章:

  • 咸阳网站建设价格wordpress手机端模板
  • 备案期间 网站想正常品牌建设部门的规章制度
  • vue做购物网站科技设计网站有哪些
  • 个人网站认证如何使用上线了app建设网站
  • win7 iis发布网站教程室内设计和网站建设哪个前景好
  • 腾讯建设网站首页网站建设seo需求文档
  • 昆明做烤瓷牙哪去柏德L网站网站建设如何选择域名
  • 怎么打帮人做网站开发的广告网络营销方式优缺点
  • 网站主题模板制作网站建设专员工作
  • 做网站找什么公司好线上推广具体应该怎么做
  • 做网站一年要多少钱免费wordpress云服务
  • h5网站西安网页设计培训价格
  • 自己做游戏资讯网站cms框架
  • 请公司做网站没有做好可以退钱吗seo优化轻松seo优化排名
  • 南通经济开发区城乡建设局网站1688免费货源网
  • 制作旅游网站设计概述做网站是先做界面还是先做后台
  • 免费注册个人网站做网站图片多少钱
  • 免费网站域名查询网站样式用什么做的
  • 渭南建设网站一个网站没有备案
  • 企业怎样建网站怎么才能在百度上做引流呢
  • 绍兴住房和城乡建设厅网站wordpress+百度云图安装
  • 做牙齿的招聘网站江苏省建设考试网站
  • discuz仿搜索网站扬中新闻中心
  • 西安市建设网站公司建设网站重要性
  • 做网站优惠沈阳建设工程信息网和辽宁建设工程信息网
  • 网站建设需要做什么准备工作上海800做网站
  • 免费网站建设推广长沙网站制作app开发公司
  • 建设网站需要懂什么深圳赶集同城网站建设
  • 会员收费网站怎么做企业内网 网站建设的解决方案
  • 百度网站评价网站公示如何做链接