代码using System.Web;
using System.Web.Configuration;
publicclass SomeConfigurationSection
{
static SomeConfigurationSection()
{
// Preparation...
}
// Properties...
#region GetSection Pattern
privatestatic SomeConfigurationSection m_section;
/// <summary>/// Gets the configuration section using the default element name./// </summary>/// <remarks>/// If an HttpContext exists, uses the WebConfigurationManager/// to get the configuration section from web.config./// </remarks>publicstatic SomeConfigurationSection GetSection()
{
return GetSection("someConfiguration");
}
/// <summary>/// Gets the configuration section using the specified element name./// </summary>/// <remarks>/// If an HttpContext exists, uses the WebConfigurationManager/// to get the configuration section from web.config./// </remarks>publicstatic SomeConfigurationSection GetSection(string definedName)
{
if (m_section == null)
{
string cfgFileName = ".config";
if (HttpContext.Current == null)
{
m_section = ConfigurationManager.GetSection(definedName)
as SomeConfigurationSection;
}
else
{
m_section = WebConfigurationManager.GetSection(definedName)
as SomeConfigurationSection;
cfgFileName = "web.config";
}
if (m_section == null)
thrownew ConfigurationException("The <" + definedName +
"> section is not defined in your " +
cfgFileName + " file!");
}
return m_section;
}
#endregion
}
代码using System.Web;
using System.Web.Configuration;
publicclass SomeConfigurationSection
{
static SomeConfigurationSection()
{
// Preparation...
}
// Properties...
#region GetSection Pattern
// Dictionary to store cached instances of the configuration objectprivatestatic Dictionary<string,
SomeConfigurationSection> m_sections;
/// <summary>/// Finds a cached section with the specified defined name./// </summary>privatestatic SomeConfigurationSection
FindCachedSection(string definedName)
{
if (m_sections == null)
{
m_sections = new Dictionary<string,
SomeConfigurationSection>();
returnnull;
}
SomeConfigurationSection section;
if (m_sections.TryGetValue(definedName, out section))
{
return section;
}
returnnull;
}
/// <summary>/// Adds the specified section to the cache under the defined name./// </summary>privatestaticvoid AddCachedSection(string definedName,
SomeConfigurationSection section)
{
if (m_sections != null)
m_sections.Add(definedName, section);
}
/// <summary>/// Removes a cached section with the specified defined name./// </summary>publicstaticvoid RemoveCachedSection(string definedName)
{
m_sections.Remove(definedName);
}
/// <summary>/// Gets the configuration section using the default element name./// </summary>/// <remarks>/// If an HttpContext exists, uses the WebConfigurationManager/// to get the configuration section from web.config. This method/// will cache the instance of this configuration section under the/// specified defined name./// </remarks>publicstatic SomeConfigurationSection GetSection()
{
return GetSection("someConfiguration");
}
/// <summary>/// Gets the configuration section using the specified element name./// </summary>/// <remarks>/// If an HttpContext exists, uses the WebConfigurationManager/// to get the configuration section from web.config. This method/// will cache the instance of this configuration section under the/// specified defined name./// </remarks>publicstatic SomeConfigurationSection GetSection(string definedName)
{
if (String.IsNullOrEmpty(definedName))
definedName = "someConfiguration";
SomeConfigurationSection section = FindCachedSection(definedName);
if (section == null)
{
string cfgFileName = ".config";
if (HttpContext.Current == null)
{
section = ConfigurationManager.GetSection(definedName)
as SomeConfigurationSection;
}
else
{
section = WebConfigurationManager.GetSection(definedName)
as SomeConfigurationSection;
cfgFileName = "web.config";
}
if (section == null)
thrownew ConfigurationException("The <" + definedName +
"> section is not defined in your " + cfgFileName +
" file!");
AddCachedSection(definedName, section);
}
return section;
}
/// <summary>/// Gets the configuration section using the default element name /// from the specified Configuration object./// </summary>/// <remarks>/// If an HttpContext exists, uses the WebConfigurationManager/// to get the configuration section from web.config./// </remarks>publicstatic SomeConfigurationSection GetSection(Configuration config)
{
return GetSection(config, "someConfiguration");
}
/// <summary>/// Gets the configuration section using the specified element name /// from the specified Configuration object./// </summary>/// <remarks>/// If an HttpContext exists, uses the WebConfigurationManager/// to get the configuration section from web.config./// </remarks>publicstatic SomeConfigurationSection GetSection(Configuration config,
string definedName)
{
if (config == null)
thrownew ArgumentNullException("config",
"The Configuration object can not be null.");
if (String.IsNullOrEmpty(definedName))
definedName = "someConfiguration";
SomeConfigurationSection section = config.GetSection(definedName)
as SomeConfigurationSection;
if (section == null)
thrownew ConfigurationException("The <" + definedName +
"> section is not defined in your .config file!");
return section;
}
#endregion
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构