IConfigurationSectionHandler 使用~
读取webconfig中自定义的xml 处理对特定的配置节的访问。
webconfig
<configSections>
<section name="NopConfig" type="BotanicSystem.Core.Configuration.NopConfig, BotanicSystem.Core" requirePermission="false" />
</configSections>
<NopConfig>
<!-- Web farm support
Enable "MultipleInstancesEnabled" if you run multiple instances.
Enable "RunOnAzureWebsites" if you run on Windows Azure Web sites (not cloud services). -->
<WebFarms MultipleInstancesEnabled="False" RunOnAzureWebsites="False" />
<!-- Windows Azure BLOB storage. Specify your connection string, container name, end point for BLOB storage here -->
<AzureBlobStorage ConnectionString="" ContainerName="" EndPoint="" />
<!-- Redis support (used by web farms, Azure, etc). Find more about it at https://azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-azure-redis-cache/ -->
<RedisCaching Enabled="false" ConnectionString="localhost" />
<!-- You can get the latest version of user agent strings at http://browscap.org/ -->
<UserAgentStrings databasePath="~/App_Data/browscap.xml" />
<!-- Set the setting below to "False" if you did not upgrade from one of the previous versions. It can slightly improve performance -->
<SupportPreviousNopcommerceVersions Enabled="True" />
<!-- Do not edit this element. For advanced users only -->
<Installation DisableSampleDataDuringInstallation="False" UseFastInstallationService="False" PluginsIgnoredDuringInstallation="" />
</NopConfig>
解析读取
/// <summary>
/// Represents a NopConfig
/// </summary>
public partial class NopConfig : IConfigurationSectionHandler
{
/// <summary>
/// Creates a configuration section handler.
/// </summary>
/// <param name="parent">Parent object.</param>
/// <param name="configContext">Configuration context object.</param>
/// <param name="section">Section XML node.</param>
/// <returns>The created section handler object.</returns>
public object Create(object parent, object configContext, XmlNode section)
{
var config = new NopConfig(); var startupNode = section.SelectSingleNode("Startup");
config.IgnoreStartupTasks = GetBool(startupNode, "IgnoreStartupTasks"); var redisCachingNode = section.SelectSingleNode("RedisCaching");
config.RedisCachingEnabled = GetBool(redisCachingNode, "Enabled");
config.RedisCachingConnectionString = GetString(redisCachingNode, "ConnectionString"); var userAgentStringsNode = section.SelectSingleNode("UserAgentStrings");
config.UserAgentStringsPath = GetString(userAgentStringsNode, "databasePath"); var supportPreviousNopcommerceVersionsNode = section.SelectSingleNode("SupportPreviousNopcommerceVersions");
config.SupportPreviousNopcommerceVersions = GetBool(supportPreviousNopcommerceVersionsNode, "Enabled"); var webFarmsNode = section.SelectSingleNode("WebFarms");
config.MultipleInstancesEnabled = GetBool(webFarmsNode, "MultipleInstancesEnabled");
config.RunOnAzureWebsites = GetBool(webFarmsNode, "RunOnAzureWebsites"); var azureBlobStorageNode = section.SelectSingleNode("AzureBlobStorage");
config.AzureBlobStorageConnectionString = GetString(azureBlobStorageNode, "ConnectionString");
config.AzureBlobStorageContainerName = GetString(azureBlobStorageNode, "ContainerName");
config.AzureBlobStorageEndPoint = GetString(azureBlobStorageNode, "EndPoint"); var installationNode = section.SelectSingleNode("Installation");
config.DisableSampleDataDuringInstallation = GetBool(installationNode, "DisableSampleDataDuringInstallation");
config.UseFastInstallationService = GetBool(installationNode, "UseFastInstallationService");
config.PluginsIgnoredDuringInstallation = GetString(installationNode, "PluginsIgnoredDuringInstallation"); return config;
} private string GetString(XmlNode node, string attrName)
{
return SetByXElement<string>(node, attrName, Convert.ToString);
} private bool GetBool(XmlNode node, string attrName)
{
return SetByXElement<bool>(node, attrName, Convert.ToBoolean);
} private T SetByXElement<T>(XmlNode node, string attrName, Func<string, T> converter)
{
if (node == null || node.Attributes == null) return default(T);
var attr = node.Attributes[attrName];
if (attr == null) return default(T);
var attrVal = attr.Value;
return converter(attrVal);
} /// <summary>
/// Indicates whether we should ignore startup tasks
/// </summary>
public bool IgnoreStartupTasks { get; private set; } /// <summary>
/// Path to database with user agent strings
/// </summary>
public string UserAgentStringsPath { get; private set; } /// <summary>
/// Indicates whether we should use Redis server for caching (instead of default in-memory caching)
/// </summary>
public bool RedisCachingEnabled { get; private set; }
/// <summary>
/// Redis connection string. Used when Redis caching is enabled
/// </summary>
public string RedisCachingConnectionString { get; private set; } /// <summary>
/// Indicates whether we should support previous nopCommerce versions (it can slightly improve performance)
/// </summary>
public bool SupportPreviousNopcommerceVersions { get; private set; } /// <summary>
/// A value indicating whether the site is run on multiple instances (e.g. web farm, Windows Azure with multiple instances, etc).
/// Do not enable it if you run on Azure but use one instance only
/// </summary>
public bool MultipleInstancesEnabled { get; private set; } /// <summary>
/// A value indicating whether the site is run on Windows Azure Websites
/// </summary>
public bool RunOnAzureWebsites { get; private set; } /// <summary>
/// Connection string for Azure BLOB storage
/// </summary>
public string AzureBlobStorageConnectionString { get; private set; }
/// <summary>
/// Container name for Azure BLOB storage
/// </summary>
public string AzureBlobStorageContainerName { get; private set; }
/// <summary>
/// End point for Azure BLOB storage
/// </summary>
public string AzureBlobStorageEndPoint { get; private set; } /// <summary>
/// A value indicating whether a store owner can install sample data during installation
/// </summary>
public bool DisableSampleDataDuringInstallation { get; private set; }
/// <summary>
/// By default this setting should always be set to "False" (only for advanced users)
/// </summary>
public bool UseFastInstallationService { get; private set; }
/// <summary>
/// A list of plugins ignored during nopCommerce installation
/// </summary>
public string PluginsIgnoredDuringInstallation { get; private set; }
}
使用
var config = ConfigurationManager.GetSection("NopConfig") as NopConfig;
IConfigurationSectionHandler 是 在System.Configuration 下
IConfigurationSectionHandler 使用~的更多相关文章
- 使用IConfigurationSectionHandler在web.config中增加自定义配置
一. 场景 这里仅举一个简单应用的例子,我希望在web.config里面增加网站的基本信息,如:网站名称,网站版本号,是否将网站暂时关闭等.二. 基本实现方法1. 定义配置节点对应的类:Site ...
- (转).net webconfig使用IConfigurationSectionHandler自定section
自定义配置结构 (使用IConfigurationSectionHandler) 假设有以下的配置信息,其在MyInfo可以重复许多次,那么应如何读取配置呢?这时就要使用自定义的配置程序了.<m ...
- IConfigurationSectionHandler 接口
IConfigurationSectionHandler 处理对特定的配置节的访问. 示例代码: public class MyConfig : IConfigurationSectionHandle ...
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自己定义节点
除了使用.net里面提供的内置处理程序来处理我们的自己定义节点外,我们还能够通过多种方法,来自己定义处理类处理我们的自己定义节点,本文主要介绍通过实现IConfigurationSectionHand ...
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
除了使用.net里面提供的内置处理程序来处理我们的自定义节点外,我们还可以通过多种方法,来自己定义处理类处理我们的自定义节点,本文主要介绍通过实现IConfigurationSectionHandle ...
- spring.net 框架分析(三)ContextRegistry.GetContext()
我们通过ContextRegistry.GetContext()建立了一个IApplicationContext得实例,那么这个实例具体是怎么建立的了. 我们来分析一下容器实例建立的过程: 我们在配置 ...
- C# 自定义Section
一.在App.config中自定义Section,这个使用了SectionGroup <?xml version="1.0" encoding="utf-8&quo ...
- Url路径重写的原理
ASP.net的地址重写(URLRewriter)实现原理及代码示例 吴剑 2007-01-01 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 概述 访问 ...
- 第13章 .NET应用程序配置
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
随机推荐
- BZOJ2435——[Noi2011]道路修建
1.题意:给个树,边的权值=两边的点数差*此边的长度,求所有边的权值和 2.分析:真不想说啥了...dfs即可 #include <cmath> #include <cstdio&g ...
- PYTHON 全局变量和局部变量
#局部变量,只能调用函数体内的变量 def fun(): a = 234 print(a) #全局变量,在函数体外声明,在函数体内都可调用 b = 'gyc' def fun(): a = 234 p ...
- shell 脚本之获取命令输出字符串以及函数参数传递
在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法. 字符串操作: 获取他的命令输出比较简单,打个简单的比方 ...
- 批处理命令——call 和 start
一.call命令总结 [1]call命令简介 学过汇编或C的朋友,肯定都知道call指令表示什么意思.其实,在这里它的意思也是一样的.在批处理脚本中,call命令用来从一个批处理脚本中调用另一个批处理 ...
- node01-创建服务器
node学习笔记目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http no ...
- jQuery 名称冲突
jQuery 名称冲突 jQuery 使用 $ 符号作为 jQuery 的简介方式. 某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号. jQuery 使用名为 ...
- javascript的几种继承
1.原型链继承:构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针.确认原型和实例之间的关系用instanceof. ...
- 摇一摇js 实现
if (window.DeviceMotionEvent) { window.addEventListener('devicemotion',deviceMotionHandler, false); ...
- js未定义判断
if (typeof(homeType) == 'undefined') { //..... //..... } typeof函数判断,如果未定义的就会返回undefined,注意undefined ...
- userdel 连同家目录一起删除
userdel -r xxx 连同家目录一起删除