cs配置文件的获取

        类多了,看都看晕了.本着职责明确的思想,在n个类的配合下,我们终于得到了我们想要的结果.有时候还真是烦

我本意是不想看配置文件如何读取的,但我就不知不觉的遇到这个问题了,只有耐着性子看了.在此我们只先需要明白,他该做什么,不该做什么就可以了

CSConfiguration负责读取配置文件

下面是我遇到的经历

当我想看看如何获取SiteUrls.config的数据时,我就是找不到读取这个路径的url,且看 SiteUrls的Instance方法

path为载入的SiteUrls.config配置文件

None.gif string  path  =  csContext.PhysicalPath(siteUrlProvider.Attributes[ " path " ]);
None.gif                    
string  overridePath  =  csContext.PhysicalPath(siteUrlProvider.Attributes[ " overridePath " ]);
None.gif                    Type type 
=  Type.GetType(siteUrlProvider.Type);
None.gif
None.gif                    XmlDocument doc 
=   null ;
None.gif                    
None.gif                    
if (File.Exists(overridePath))
ExpandedBlockStart.gifContractedBlock.gif                    
dot.gif {
InBlock.gif                        doc 
= Merger.MergeXmlFiles(path, overridePath);
ExpandedBlockEnd.gif                    }

None.gif                    
else
ExpandedBlockStart.gifContractedBlock.gif                    
dot.gif {
InBlock.gif                        doc 
= new XmlDocument();
InBlock.gif                        doc.Load(path);
ExpandedBlockEnd.gif                    }

于是我找到了Provider类


None.gif                    CSConfiguration config 
=  CSConfiguration.GetConfig();
None.gif                    
None.gif                    Provider siteUrlProvider 
=  config.Providers[ " SiteUrlsDataProvider " as  Provider;

继续看CSConfiguration的Providers,其为一个哈希表,我们还不知道如何获取,CSConfiguration让我们看到了唯一的操作就是GetConfig

ExpandedBlockStart.gif ContractedBlock.gif public  Hashtable Providers  dot.gif get dot.gifreturn providers; } }


让我们再看GetConfig方法,下面的代码有点眉目了,我们终于看到了communityserver.config配置文件,好象跟我们想要的SiteUrls没关系,我们只要一个SiteUrls的路径而已.
None.gif string  path  =   null ;
None.gif                
string  overridePath  =   null ;
None.gif                XmlDocument doc 
=   null ;
None.gif                HttpContext context 
=  HttpContext.Current;
None.gif                
if  (context  !=   null )
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                    path 
= context.Server.MapPath("~/communityserver.config");
InBlock.gif                    overridePath 
= context.Server.MapPath("~/communityserver_override.config");
ExpandedBlockEnd.gif                }

None.gif                
else
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                    path 
= Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "communityserver.config");
InBlock.gif                    overridePath 
= Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "communityserver_override.config");
ExpandedBlockEnd.gif                }

None.gif
None.gif                
None.gif                
if (File.Exists(overridePath))
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                   doc 
= Merger.MergeXmlFiles(path, overridePath);
ExpandedBlockEnd.gif                }

None.gif                
else
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                    doc 
= new XmlDocument();
InBlock.gif                    doc.Load(path);    
ExpandedBlockEnd.gif                }

再看下来,开始真正实例化了

None.gif // 实例化
None.gif
                config  =   new  CSConfiguration(doc);

接着我们去看构造函数干了什么

None.gif          public  CSConfiguration(XmlDocument doc)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            XmlDoc 
= doc;
InBlock.gif            LoadValuesFromConfigurationXml();
ExpandedBlockEnd.gif        }

再看LoadValuesFromConfigurationXml方法,看来真正做事情的是他

看到这里

None.gif foreach  (XmlNode child  in  node.ChildNodes)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif
InBlock.gif                
if (child.Name == "providers")
InBlock.gif                    GetProviders(child, providers);
InBlock.gif
InBlock.gif                
if (child.Name == "appLocation")
InBlock.gif                    GetAppLocation(child);
InBlock.gif
InBlock.gif                
if (child.Name == "extensionModules")
InBlock.gif                    GetProviders(child, extensions);
InBlock.gif
InBlock.gif                
if (child.Name == "roleConfiguration")
InBlock.gif                    GetRoleConfiguration(child);
InBlock.gif
InBlock.gif                
if (child.Name == "filterLanguages")
InBlock.gif                    GetFilterLanguages(child);
InBlock.gif
InBlock.gif                
if (child.Name == "editors")
InBlock.gif                    GetEditors(child);
ExpandedBlockEnd.gif            }

打开配置文件看看发现以下节点

None.gif                  < add 
None.gif                    
name  = "SiteUrlsDataProvider"  
None.gif                    type 
= "CommunityServer.Urls.UrlsData, CommunityServer.Urls"  
None.gif                    path 
= "SiteUrls.config"  
None.gif            overridePath 
="SiteUrls_override.config"
None.gif                
/>

ExpandedBlockStart.gif ContractedBlock.gif   internal   void  GetProviders(XmlNode node, Hashtable table)  dot.gif {
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif            
foreach (XmlNode provider in node.ChildNodes) dot.gif{
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif                
switch (provider.Name) dot.gif{
InBlock.gif                    
case "add" :
InBlock.gif                        table.Add(provider.Attributes[
"name"].Value, new Provider(provider.Attributes) );
InBlock.gif                        
break;
InBlock.gif
InBlock.gif                    
case "remove" :
InBlock.gif                        table.Remove(provider.Attributes[
"name"].Value);
InBlock.gif                        
break;
InBlock.gif
InBlock.gif                    
case "clear" :
InBlock.gif                        table.Clear();
InBlock.gif                        
break;
InBlock.gif
ExpandedSubBlockEnd.gif                }

InBlock.gif
ExpandedSubBlockEnd.gif            }

InBlock.gif
ExpandedBlockEnd.gif        }

好了,我们应该差不多搞明白了.其他的应该类似.慢慢的记录.

转载于:https://www.cnblogs.com/Clingingboy/archive/2007/05/06/737124.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值