nawawa001 发表于 2017-7-1 09:12:15

IConfigurationSectionHandler 使用~

  读取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;
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   }
View Code  使用



1 var config = ConfigurationManager.GetSection("NopConfig") as NopConfig;
  IConfigurationSectionHandler是 在System.Configuration 下
页: [1]
查看完整版本: IConfigurationSectionHandler 使用~