逆水行船

别人的天堂,是我的异乡;无端的繁华,倍添我的惆怅

 

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;
    }
   }
  }
 }
}

posted on   荣-  阅读(355)  评论(1编辑  收藏  举报

编辑推荐:
· 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)

导航

统计

点击右上角即可分享
微信分享提示