首先出现的<sectionGroup name="dotnetnuke">里面使用IConfigurationSectionHandle派生的类DotNetNuke.Framework.Providers命名空间下的ProviderConfigurationHandler进行自定义的控制,在web.config的后面使用了
<dotnetnuke></dotnetnuke>这个节,对于数据节,我们可以看到
<data defaultProvider="SqlDataProvider">
<providers>
<clear/>
<add name="SqlDataProvider" type="DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider" connectionStringName="SiteSqlServer" upgradeConnectionString="" providerPath="~/Providers/DataProviders/SqlDataProvider/" objectQualifier="dnn_" databaseOwner="dbo"/>
</providers>
</data>
这个data 是被以下代码分析
public virtual object Create(object parent, object context, System.Xml.XmlNode node)
{
ProviderConfiguration objProviderConfiguration = new ProviderConfiguration();
objProviderConfiguration.LoadValuesFromConfigurationXml(node);
return objProviderConfiguration;
}
然后在ProviderConfiguration类中的以下代码调用
internal void LoadValuesFromConfigurationXml(XmlNode node)
{
XmlAttributeCollection attributeCollection = node.Attributes;
_DefaultProvider = attributeCollection["defaultProvider"].Value;
foreach (XmlNode child in node.ChildNodes) {
if (child.Name == "providers") {
GetProviders(child);
}
}
}
internal void GetProviders(XmlNode node)
{
foreach (XmlNode Provider in node.ChildNodes) {
switch (Provider.Name) {
case "add":
Providers.Add(Provider.Attributes["name"].Value, new Provider(Provider.Attributes));
break;
case "remove":
Providers.Remove(Provider.Attributes["name"].Value);
break;
case "clear":
Providers.Clear();
break;
}
}
}
以上代码对providers这个节点 里面的数据进行了过滤,add,remove,clear ,保存了DefaultProvider,是通过xml 的atrribue属性
当把配置节用hashtale保存好以后,在后面的模块的数据库开发中的类 class SqlDataProvider,可以看到
private ProviderConfiguration _providerConfiguration = ProviderConfiguration.GetProviderConfiguration(ProviderType);
ProviderType就是data节,得到providerConfiguration后就可以读取属性了