读取webconfig中自定义的xml 处理对特定的配置节的访问。
webconfig
1 <configSections> 2 <section name="NopConfig" type="BotanicSystem.Core.Configuration.NopConfig, BotanicSystem.Core" requirePermission="false" /> 3 </configSections>
1 <NopConfig> 2 <!-- Web farm support 3 Enable "MultipleInstancesEnabled" if you run multiple instances. 4 Enable "RunOnAzureWebsites" if you run on Windows Azure Web sites (not cloud services). --> 5 <WebFarms MultipleInstancesEnabled="False" RunOnAzureWebsites="False" /> 6 <!-- Windows Azure BLOB storage. Specify your connection string, container name, end point for BLOB storage here --> 7 <AzureBlobStorage ConnectionString="" ContainerName="" EndPoint="" /> 8 <!-- 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/ --> 9 <RedisCaching Enabled="false" ConnectionString="localhost" /> 10 <!-- You can get the latest version of user agent strings at http://browscap.org/ --> 11 <UserAgentStrings databasePath="~/App_Data/browscap.xml" /> 12 <!-- Set the setting below to "False" if you did not upgrade from one of the previous versions. It can slightly improve performance --> 13 <SupportPreviousNopcommerceVersions Enabled="True" /> 14 <!-- Do not edit this element. For advanced users only --> 15 <Installation DisableSampleDataDuringInstallation="False" UseFastInstallationService="False" PluginsIgnoredDuringInstallation="" /> 16 </NopConfig>
解析读取

1 /// <summary> 2 /// Represents a NopConfig 3 /// </summary> 4 public partial class NopConfig : IConfigurationSectionHandler 5 { 6 /// <summary> 7 /// Creates a configuration section handler. 8 /// </summary> 9 /// <param name="parent">Parent object.</param> 10 /// <param name="configContext">Configuration context object.</param> 11 /// <param name="section">Section XML node.</param> 12 /// <returns>The created section handler object.</returns> 13 public object Create(object parent, object configContext, XmlNode section) 14 { 15 var config = new NopConfig(); 16 17 var startupNode = section.SelectSingleNode("Startup"); 18 config.IgnoreStartupTasks = GetBool(startupNode, "IgnoreStartupTasks"); 19 20 var redisCachingNode = section.SelectSingleNode("RedisCaching"); 21 config.RedisCachingEnabled = GetBool(redisCachingNode, "Enabled"); 22 config.RedisCachingConnectionString = GetString(redisCachingNode, "ConnectionString"); 23 24 var userAgentStringsNode = section.SelectSingleNode("UserAgentStrings"); 25 config.UserAgentStringsPath = GetString(userAgentStringsNode, "databasePath"); 26 27 var supportPreviousNopcommerceVersionsNode = section.SelectSingleNode("SupportPreviousNopcommerceVersions"); 28 config.SupportPreviousNopcommerceVersions = GetBool(supportPreviousNopcommerceVersionsNode, "Enabled"); 29 30 var webFarmsNode = section.SelectSingleNode("WebFarms"); 31 config.MultipleInstancesEnabled = GetBool(webFarmsNode, "MultipleInstancesEnabled"); 32 config.RunOnAzureWebsites = GetBool(webFarmsNode, "RunOnAzureWebsites"); 33 34 var azureBlobStorageNode = section.SelectSingleNode("AzureBlobStorage"); 35 config.AzureBlobStorageConnectionString = GetString(azureBlobStorageNode, "ConnectionString"); 36 config.AzureBlobStorageContainerName = GetString(azureBlobStorageNode, "ContainerName"); 37 config.AzureBlobStorageEndPoint = GetString(azureBlobStorageNode, "EndPoint"); 38 39 var installationNode = section.SelectSingleNode("Installation"); 40 config.DisableSampleDataDuringInstallation = GetBool(installationNode, "DisableSampleDataDuringInstallation"); 41 config.UseFastInstallationService = GetBool(installationNode, "UseFastInstallationService"); 42 config.PluginsIgnoredDuringInstallation = GetString(installationNode, "PluginsIgnoredDuringInstallation"); 43 44 return config; 45 } 46 47 private string GetString(XmlNode node, string attrName) 48 { 49 return SetByXElement<string>(node, attrName, Convert.ToString); 50 } 51 52 private bool GetBool(XmlNode node, string attrName) 53 { 54 return SetByXElement<bool>(node, attrName, Convert.ToBoolean); 55 } 56 57 private T SetByXElement<T>(XmlNode node, string attrName, Func<string, T> converter) 58 { 59 if (node == null || node.Attributes == null) return default(T); 60 var attr = node.Attributes[attrName]; 61 if (attr == null) return default(T); 62 var attrVal = attr.Value; 63 return converter(attrVal); 64 } 65 66 /// <summary> 67 /// Indicates whether we should ignore startup tasks 68 /// </summary> 69 public bool IgnoreStartupTasks { get; private set; } 70 71 /// <summary> 72 /// Path to database with user agent strings 73 /// </summary> 74 public string UserAgentStringsPath { get; private set; } 75 76 77 78 /// <summary> 79 /// Indicates whether we should use Redis server for caching (instead of default in-memory caching) 80 /// </summary> 81 public bool RedisCachingEnabled { get; private set; } 82 /// <summary> 83 /// Redis connection string. Used when Redis caching is enabled 84 /// </summary> 85 public string RedisCachingConnectionString { get; private set; } 86 87 88 89 /// <summary> 90 /// Indicates whether we should support previous nopCommerce versions (it can slightly improve performance) 91 /// </summary> 92 public bool SupportPreviousNopcommerceVersions { get; private set; } 93 94 95 96 /// <summary> 97 /// A value indicating whether the site is run on multiple instances (e.g. web farm, Windows Azure with multiple instances, etc). 98 /// Do not enable it if you run on Azure but use one instance only 99 /// </summary> 100 public bool MultipleInstancesEnabled { get; private set; } 101 102 /// <summary> 103 /// A value indicating whether the site is run on Windows Azure Websites 104 /// </summary> 105 public bool RunOnAzureWebsites { get; private set; } 106 107 /// <summary> 108 /// Connection string for Azure BLOB storage 109 /// </summary> 110 public string AzureBlobStorageConnectionString { get; private set; } 111 /// <summary> 112 /// Container name for Azure BLOB storage 113 /// </summary> 114 public string AzureBlobStorageContainerName { get; private set; } 115 /// <summary> 116 /// End point for Azure BLOB storage 117 /// </summary> 118 public string AzureBlobStorageEndPoint { get; private set; } 119 120 121 /// <summary> 122 /// A value indicating whether a store owner can install sample data during installation 123 /// </summary> 124 public bool DisableSampleDataDuringInstallation { get; private set; } 125 /// <summary> 126 /// By default this setting should always be set to "False" (only for advanced users) 127 /// </summary> 128 public bool UseFastInstallationService { get; private set; } 129 /// <summary> 130 /// A list of plugins ignored during nopCommerce installation 131 /// </summary> 132 public string PluginsIgnoredDuringInstallation { get; private set; } 133 }
使用
1 var config = ConfigurationManager.GetSection("NopConfig") as NopConfig;
IConfigurationSectionHandler 是 在System.Configuration 下