zoukankan      html  css  js  c++  java
  • DOTNETNUKE 配置文件类的使用 dodo

    DOTNETNUKE 配置文件类有:

       ProviderConfigurationHandler类

       Provider类

       ProviderConfiguration类

    web.config文件中引用ProviderConfigurationHandler,该类继承.NET FrameWork接口IConfigurationSectionHandler

       <configSections>
        
    <sectionGroup name="dotnetnuke">
          
    <section name="data" requirePermission="false" type="DotNetNuke.Framework.Providers.ProviderConfigurationHandler, DotNetNuke" />
        
    </sectionGroup>
      
    </configSections>

    实现Create方法如下:

           Public Overridable Overloads Function Create(ByVal parent As Object, ByVal context As Object, ByVal node As System.Xml.XmlNode) As Object Implements IConfigurationSectionHandler.Create
                Dim objProviderConfiguration As New ProviderConfiguration
                objProviderConfiguration.LoadValuesFromConfigurationXml(node)
                Return objProviderConfiguration
            End Function

    主要是使用了ProviderConfiguration得LoadValuesFromConfiguration()方法

    该方法主要对Providers hashtable值进行操作,通过读取web.config文件中得<data>子节点值,装载到Providers中

    主要代码如下:

    Friend Sub LoadValuesFromConfigurationXml(ByVal node As XmlNode)
       Dim attributeCollection As XmlAttributeCollection 
    = node.Attributes

       
    ' Get the default provider
       _DefaultProvider = attributeCollection("defaultProvider").Value

       
    ' Read child nodes
       Dim child As XmlNode
       For Each child In node.ChildNodes
        If child.Name 
    = "providers" Then
                        GetProviders(child)
                    End If
       Next child
      End Sub

      Friend Sub GetProviders(ByVal node As XmlNode)

       Dim Provider As XmlNode
       For Each Provider In node.ChildNodes

        Select Case Provider.Name
         Case 
    "add"
          Providers.Add(Provider.Attributes(
    "name").Value, New Provider(Provider.Attributes))

         Case 
    "remove"
          Providers.Remove(Provider.Attributes(
    "name").Value)

         Case 
    "clear"
          Providers.Clear()
        End Select
       Next Provider
      End Sub


    当其子节点为“add”时,新建一个Provider实体,并放入Providers 哈西表中。

    Public Shared Function GetProviderConfiguration(ByVal strProvider As String) As ProviderConfiguration
                Return CType(Config.GetSection(
    "dotnetnuke/" & strProvider), ProviderConfiguration)
      End Function


    GetProviderConfiguration(strProvider)方法作用是获取web.config节点信息,并装入到ProviderConfiguration类实体当中。

    所以该类的操作都是围绕着providers哈西表来得,即把取得的provider数据都放入该哈西表中。

    下面介绍Provider类

    其有两个属性:

       Public Readonly property Name()as string

       public ReadOnly property Type() as string

    一个New(XmlattributeCollection)方法

    该方法做了一些设置属性值得操作,从XmlattributeCollection中获取值。

    并且做了把一些其他该xml属性集合放入到一个NameValueCollection集合当中。

    web.config 节点如下:

    <data defaultProvider="SqlDataProvider">
          
    <providers>
            
    <clear />
            
    <add name="SqlDataProvider" type="DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider" connectionStringName="SiteSqlServer" upgradeConnectionString="" providerPath="~\Providers\DataProviders\SqlDataProvider\" objectQualifier="" templateFile="DotNetNuke_template.mdf" databaseOwner="dbo" />
          
    </providers>
    </data>

    应用:

    Public Function GetApplicationName(ByVal PortalID As Integer) As String

                Dim appName As String

                
    'Get the Data Provider Configuration
                Dim _providerConfiguration As ProviderConfiguration = ProviderConfiguration.GetProviderConfiguration("data")

    //装入ProviderConfiguration类实体

                
    ' Read the configuration specific information for the current Provider
                Dim objProvider As Provider = CType(_providerConfiguration.Providers(_providerConfiguration.DefaultProvider), Provider)

    //读取Providers哈西表中的DefaultProvider值

                
    'Get the Object Qualifier frm the Provider Configuration
                Dim _objectQualifier As String = objProvider.Attributes("objectQualifier")
                If _objectQualifier 
    <> "" And _objectQualifier.EndsWith("_"= False Then
                    _objectQualifier 
    += "_"
                End If

                appName 
    = _objectQualifier + Convert.ToString(PortalID)

                Return appName
            End Function


     以上三个类究竟在一个系统中有什么用呢?我个人理解认为是为了灵活性,我们可以直接在config文件修改provider值,就可实现我们究竟需要使用哪一个provider,而不需要重新编译,对于一个系统比较好维护,灵活性比较高。

    设计技术点:

       configManager类(Getsection()方法的使用)

      IConfigurationSectionHandler接口 - ProviderconfigurationHandler继承该接口

      hashtable、NamevalueCollection、XmlattributeCollection、xmlNode类型的使用

  • 相关阅读:
    powershell初探(七)
    powershell初探(九)
    打造一个有感觉的Vim(一)
    屏幕录像软件Wink
    注释也精彩
    解决XP专业版局域网访问故障十八招
    可以抓文字的抓图软件
    轻松玩转XP系统(一)
    Excel实战技巧之[活用条件格式]
    局域网传输工具飞鸽传书IPMessager
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/462173.html
Copyright © 2011-2022 走看看