DOTNETNUKE 配置文件类有:
ProviderConfigurationHandler类
Provider类
ProviderConfiguration类
web.config文件中引用ProviderConfigurationHandler,该类继承.NET FrameWork接口IConfigurationSectionHandler
< sectionGroup name ="dotnetnuke" >
< section name ="data" requirePermission ="false" type ="DotNetNuke.Framework.Providers.ProviderConfigurationHandler, DotNetNuke" />
</ sectionGroup >
</ configSections >
实现Create方法如下:
Dim objProviderConfiguration As New ProviderConfiguration
objProviderConfiguration.LoadValuesFromConfigurationXml(node)
Return objProviderConfiguration
End Function
主要是使用了ProviderConfiguration得LoadValuesFromConfiguration()方法
该方法主要对Providers hashtable值进行操作,通过读取web.config文件中得<data>子节点值,装载到Providers中
主要代码如下:
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 哈西表中。
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 节点如下:
< 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 >
应用:
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类型的使用