dnn 的web.config 分析

   首先出现的<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后就可以读取属性了

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章