• 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类型的使用

  • 相关阅读:
    接口隔离原则(Interface Segregation Principle)ISP
    依赖倒置(Dependence Inversion Principle)DIP
    里氏替换原则(Liskov Substitution Principle) LSP
    单一指责原则(Single Responsibility Principle) SRP
    《面向对象葵花宝典》阅读笔记
    智能手表ticwatch穿戴体验
    我所理解的软件工程
    RBAC基于角色的权限访问控制
    程序员健康指南阅读笔记
    我晕倒在厕所了
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/462173.html
Copyright © 2020-2023  润新知