cs配置文件的获取
2007-05-06 15:19 Clingingboy 阅读(1506) 评论(0) 编辑 收藏 举报
类多了,看都看晕了.本着职责明确的思想,在n个类的配合下,我们终于得到了我们想要的结果.有时候还真是烦
我本意是不想看配置文件如何读取的,但我就不知不觉的遇到这个问题了,只有耐着性子看了.在此我们只先需要明白,他该做什么,不该做什么就可以了
CSConfiguration负责读取配置文件
下面是我遇到的经历
当我想看看如何获取SiteUrls.config的数据时,我就是找不到读取这个路径的url,且看SiteUrls的Instance方法
path为载入的SiteUrls.config配置文件
于是我找到了Provider类
CSConfiguration config = CSConfiguration.GetConfig();
Provider siteUrlProvider = config.Providers["SiteUrlsDataProvider"] as Provider;
继续看CSConfiguration的Providers,其为一个哈希表,我们还不知道如何获取,CSConfiguration让我们看到了唯一的操作就是GetConfig
让我们再看GetConfig方法,下面的代码有点眉目了,我们终于看到了communityserver.config配置文件,好象跟我们想要的SiteUrls没关系,我们只要一个SiteUrls的路径而已.
再看下来,开始真正实例化了
接着我们去看构造函数干了什么
再看LoadValuesFromConfigurationXml方法,看来真正做事情的是他
看到这里
打开配置文件看看发现以下节点
好了,我们应该差不多搞明白了.其他的应该类似.慢慢的记录.
我本意是不想看配置文件如何读取的,但我就不知不觉的遇到这个问题了,只有耐着性子看了.在此我们只先需要明白,他该做什么,不该做什么就可以了
CSConfiguration负责读取配置文件
下面是我遇到的经历
当我想看看如何获取SiteUrls.config的数据时,我就是找不到读取这个路径的url,且看SiteUrls的Instance方法
path为载入的SiteUrls.config配置文件
string path = csContext.PhysicalPath(siteUrlProvider.Attributes["path"]);
string overridePath = csContext.PhysicalPath(siteUrlProvider.Attributes["overridePath"]);
Type type = Type.GetType(siteUrlProvider.Type);
XmlDocument doc = null;
if(File.Exists(overridePath))
{
doc = Merger.MergeXmlFiles(path, overridePath);
}
else
{
doc = new XmlDocument();
doc.Load(path);
}
string overridePath = csContext.PhysicalPath(siteUrlProvider.Attributes["overridePath"]);
Type type = Type.GetType(siteUrlProvider.Type);
XmlDocument doc = null;
if(File.Exists(overridePath))
{
doc = Merger.MergeXmlFiles(path, overridePath);
}
else
{
doc = new XmlDocument();
doc.Load(path);
}
于是我找到了Provider类
CSConfiguration config = CSConfiguration.GetConfig();
Provider siteUrlProvider = config.Providers["SiteUrlsDataProvider"] as Provider;
继续看CSConfiguration的Providers,其为一个哈希表,我们还不知道如何获取,CSConfiguration让我们看到了唯一的操作就是GetConfig
public Hashtable Providers { get { return providers; } }
让我们再看GetConfig方法,下面的代码有点眉目了,我们终于看到了communityserver.config配置文件,好象跟我们想要的SiteUrls没关系,我们只要一个SiteUrls的路径而已.
string path = null;
string overridePath = null;
XmlDocument doc = null;
HttpContext context = HttpContext.Current;
if (context != null)
{
path = context.Server.MapPath("~/communityserver.config");
overridePath = context.Server.MapPath("~/communityserver_override.config");
}
else
{
path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "communityserver.config");
overridePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "communityserver_override.config");
}
if(File.Exists(overridePath))
{
doc = Merger.MergeXmlFiles(path, overridePath);
}
else
{
doc = new XmlDocument();
doc.Load(path);
}
string overridePath = null;
XmlDocument doc = null;
HttpContext context = HttpContext.Current;
if (context != null)
{
path = context.Server.MapPath("~/communityserver.config");
overridePath = context.Server.MapPath("~/communityserver_override.config");
}
else
{
path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "communityserver.config");
overridePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "communityserver_override.config");
}
if(File.Exists(overridePath))
{
doc = Merger.MergeXmlFiles(path, overridePath);
}
else
{
doc = new XmlDocument();
doc.Load(path);
}
再看下来,开始真正实例化了
//实例化
config = new CSConfiguration(doc);
config = new CSConfiguration(doc);
接着我们去看构造函数干了什么
public CSConfiguration(XmlDocument doc)
{
XmlDoc = doc;
LoadValuesFromConfigurationXml();
}
{
XmlDoc = doc;
LoadValuesFromConfigurationXml();
}
再看LoadValuesFromConfigurationXml方法,看来真正做事情的是他
看到这里
foreach (XmlNode child in node.ChildNodes)
{
if (child.Name == "providers")
GetProviders(child, providers);
if (child.Name == "appLocation")
GetAppLocation(child);
if (child.Name == "extensionModules")
GetProviders(child, extensions);
if (child.Name == "roleConfiguration")
GetRoleConfiguration(child);
if (child.Name == "filterLanguages")
GetFilterLanguages(child);
if (child.Name == "editors")
GetEditors(child);
}
{
if (child.Name == "providers")
GetProviders(child, providers);
if (child.Name == "appLocation")
GetAppLocation(child);
if (child.Name == "extensionModules")
GetProviders(child, extensions);
if (child.Name == "roleConfiguration")
GetRoleConfiguration(child);
if (child.Name == "filterLanguages")
GetFilterLanguages(child);
if (child.Name == "editors")
GetEditors(child);
}
打开配置文件看看发现以下节点
<add
name = "SiteUrlsDataProvider"
type = "CommunityServer.Urls.UrlsData, CommunityServer.Urls"
path = "SiteUrls.config"
overridePath ="SiteUrls_override.config"
/>
name = "SiteUrlsDataProvider"
type = "CommunityServer.Urls.UrlsData, CommunityServer.Urls"
path = "SiteUrls.config"
overridePath ="SiteUrls_override.config"
/>
internal void GetProviders(XmlNode node, Hashtable table) {
foreach (XmlNode provider in node.ChildNodes) {
switch (provider.Name) {
case "add" :
table.Add(provider.Attributes["name"].Value, new Provider(provider.Attributes) );
break;
case "remove" :
table.Remove(provider.Attributes["name"].Value);
break;
case "clear" :
table.Clear();
break;
}
}
}
foreach (XmlNode provider in node.ChildNodes) {
switch (provider.Name) {
case "add" :
table.Add(provider.Attributes["name"].Value, new Provider(provider.Attributes) );
break;
case "remove" :
table.Remove(provider.Attributes["name"].Value);
break;
case "clear" :
table.Clear();
break;
}
}
}
好了,我们应该差不多搞明白了.其他的应该类似.慢慢的记录.