DNN学习笔记-代码学习:ProviderConfiguration
using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
using System.Configuration;
using System.Web;
using System.Xml;
namespace WebApplication1
{
/// <summary>
/// 返回存储配置信息的对象,
/// 通过LoadValuesFromConfigurationXml方法和配置信息来控制当前哈希表。
/// </summary>
public class ProviderConfiguration
{
/// <summary>
/// 一个哈希表
/// </summary>
private Hashtable _Providers = new Hashtable();
/// <summary>
/// 配置元素的“defaultProvider”属性值
/// </summary>
private string _DefaultProvider;
public ProviderConfiguration()
{
}
/// <summary>
/// 从配置文件的dotnetnuke元素中取得信息,并返回为ProviderConfiguration对象
/// </summary>
/// <param name="strProvider"></param>
/// <returns></returns>
public static ProviderConfiguration GetProviderConfiguration(string strProvider)
{
// 根据配置信息取得ProviderConfiguration对象
return (ProviderConfiguration)ConfigurationSettings.GetConfig("dotnetnuke/" + strProvider);
}
public string DefaultProvider
{
get
{
return _DefaultProvider;
}
}
public Hashtable Providers
{
get
{
return _Providers;
}
}
/// <summary>
///
/// </summary>
/// <param name="node"></param>
public void LoadValuesFromConfigurationXml(XmlNode node)
{
// 可以按名称和索引访问的属性集合
XmlAttributeCollection attributeCollection = node.Attributes;
// 给DefaultProvider赋值
_DefaultProvider = attributeCollection["defaultProvider"].Value;
// 循环子节点
foreach (XmlNode child in node.ChildNodes)
{
if (child.Name == "providers")
{
// 根据配置信息来操作哈希表_Providers
GetProviders(child);
}
}
}
/// <summary>
/// 根据配置信息来操作哈希表_Providers。
/// </summary>
/// <param name="node">Xml文档节点</param>
public void GetProviders(XmlNode node)
{
foreach(XmlNode provider in node)
{
switch (provider.Name)
{
// 根据配置信息,向缓存中添加新元素。
//将生成的Provider对象作为值,name属性值作为键值,添加到哈希表中
case "add":
// 将带有指定键和值的元素添加到哈希表_Providers中
Providers.Add(provider.Attributes["name"].Value, new Provider(provider.Attributes));
break;
// 根据配置信息,向缓存中移除元素
// 从 System.Collections.Hashtable 中移除键值为name属性值的元素。
case "remove":
// 将带有指定键和值的元素从哈希表_Providers中移除
Providers.Remove(provider.Attributes["name"].Value);
break;
// 根据配置信息,清除缓存中的元素
// 从 System.Collections.Hashtable 中移除所有元素。
case "clear":
// 移除哈希表_Providers中的所有元素
Providers.Clear();
break;
}
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)