mojoPortal-provider模式学习之1.1 --IndexBuilderConfiguration
使用provider模式的第三步为 建立Provider Configuration 类
在mojoPortal中索引provider中相关类为IndexBuilderConfiguration
这个类的主要作用是读取配置文件中所有相关provider的信息 。
代码如下
1
public class IndexBuilderConfiguration
2
{
3
private static readonly ILog log
4
= LogManager.GetLogger(typeof(IndexBuilderConfiguration));
5
6
7
private ProviderSettingsCollection providerSettingsCollection
8
= new ProviderSettingsCollection();
9
10
public ProviderSettingsCollection Providers
11
{
12
get { return providerSettingsCollection; }
13
}
14
15
public static IndexBuilderConfiguration GetConfig()
16
{
17
try
18
{
19
20
//判断缓存中是否已经存在IndexBuilder的配置文件,如果存在则返回缓存中的文件
21
if (
22
(HttpRuntime.Cache["mojoIndexBuilderConfiguration"] != null)
23
&& (HttpRuntime.Cache["mojoIndexBuilderConfiguration"] is IndexBuilderConfiguration)
24
)
25
{
26
return (IndexBuilderConfiguration)HttpRuntime.Cache["mojoIndexBuilderConfiguration"];
27
}
28
29
//建立同本类相同的类型。
30
IndexBuilderConfiguration indexBuilderConfig
31
= new IndexBuilderConfiguration();
32
33
//指定配置文件所在的路径
34
String configFolderName = "~/Setup/indexbuilderconfig/";
35
36
string pathToConfigFolder
37
= HttpContext.Current.Server.MapPath(configFolderName);
38
39
40
if (!Directory.Exists(pathToConfigFolder)) return indexBuilderConfig;
41
42
DirectoryInfo directoryInfo
43
= new DirectoryInfo(pathToConfigFolder);
44
45
//所有配置文件列表
46
FileInfo[] configFiles = directoryInfo.GetFiles("*.config");
47
48
//把所有配置文件中的相关信息加到当前类的ProviderSettingCollection集合中
49
foreach (FileInfo fileInfo in configFiles)
50
{
51
XmlDocument configXml = new XmlDocument();
52
configXml.Load(fileInfo.FullName);
53
//具体添加信息到ProviderSettingCollection集合中的方法
54
indexBuilderConfig.LoadValuesFromConfigurationXml(configXml.DocumentElement);
55
56
}
57
58
//下面几行的意思应该是如果web.config文件变动,更新缓存
59
AggregateCacheDependency aggregateCacheDependency
60
= new AggregateCacheDependency();
61
62
string pathToWebConfig
63
= HttpContext.Current.Server.MapPath("~/Web.config");
64
65
aggregateCacheDependency.Add(new CacheDependency(pathToWebConfig));
66
67
//把当前类加入到缓存中
68
System.Web.HttpRuntime.Cache.Insert(
69
"mojoIndexBuilderConfiguration",
70
indexBuilderConfig,
71
aggregateCacheDependency,
72
DateTime.Now.AddYears(1),
73
TimeSpan.Zero,
74
System.Web.Caching.CacheItemPriority.Default,
75
null);
76
77
//返回当前类的信息。
78
79
return (IndexBuilderConfiguration)HttpRuntime.Cache["mojoIndexBuilderConfiguration"];
80
81
}
82
catch (HttpException ex)
83
{
84
log.Error(ex);
85
86
}
87
catch (System.Xml.XmlException ex)
88
{
89
log.Error(ex);
90
91
}
92
catch (ArgumentException ex)
93
{
94
log.Error(ex);
95
96
}
97
catch (NullReferenceException ex)
98
{
99
log.Error(ex);
100
101
}
102
103
return null;
104
105
106
}
107
108
109
//从Xml文件中获取信息
110
public void LoadValuesFromConfigurationXml(XmlNode node)
111
{
112
foreach (XmlNode child in node.ChildNodes)
113
{
114
if (child.Name == "providers")
115
{
116
foreach (XmlNode providerNode in child.ChildNodes)
117
{
118
//在providers的子结点中,如果类型为add,并且name,type属性不为空,则添加到ProviderSettingsCollection集合中
119
if (
120
(providerNode.NodeType == XmlNodeType.Element)
121
&& (providerNode.Name == "add")
122
)
123
{
124
if (
125
(providerNode.Attributes["name"] != null)
126
&& (providerNode.Attributes["type"] != null)
127
)
128
{
129
ProviderSettings providerSettings
130
= new ProviderSettings(
131
providerNode.Attributes["name"].Value,
132
providerNode.Attributes["type"].Value);
133
134
providerSettingsCollection.Add(providerSettings);
135
}
136
137
}
138
}
139
140
}
141
}
142
}
143
144
145
}
public class IndexBuilderConfiguration2
{3
private static readonly ILog log4
= LogManager.GetLogger(typeof(IndexBuilderConfiguration));5

6

7
private ProviderSettingsCollection providerSettingsCollection 8
= new ProviderSettingsCollection();9

10
public ProviderSettingsCollection Providers11
{12
get { return providerSettingsCollection; }13
}14

15
public static IndexBuilderConfiguration GetConfig()16
{17
try18
{19

20
//判断缓存中是否已经存在IndexBuilder的配置文件,如果存在则返回缓存中的文件21
if (22
(HttpRuntime.Cache["mojoIndexBuilderConfiguration"] != null)23
&& (HttpRuntime.Cache["mojoIndexBuilderConfiguration"] is IndexBuilderConfiguration)24
)25
{26
return (IndexBuilderConfiguration)HttpRuntime.Cache["mojoIndexBuilderConfiguration"];27
}28

29
//建立同本类相同的类型。30
IndexBuilderConfiguration indexBuilderConfig31
= new IndexBuilderConfiguration();32

33
//指定配置文件所在的路径34
String configFolderName = "~/Setup/indexbuilderconfig/";35

36
string pathToConfigFolder37
= HttpContext.Current.Server.MapPath(configFolderName);38

39

40
if (!Directory.Exists(pathToConfigFolder)) return indexBuilderConfig;41

42
DirectoryInfo directoryInfo43
= new DirectoryInfo(pathToConfigFolder);44

45
//所有配置文件列表46
FileInfo[] configFiles = directoryInfo.GetFiles("*.config");47

48
//把所有配置文件中的相关信息加到当前类的ProviderSettingCollection集合中49
foreach (FileInfo fileInfo in configFiles)50
{51
XmlDocument configXml = new XmlDocument();52
configXml.Load(fileInfo.FullName);53
//具体添加信息到ProviderSettingCollection集合中的方法54
indexBuilderConfig.LoadValuesFromConfigurationXml(configXml.DocumentElement);55

56
}57

58
//下面几行的意思应该是如果web.config文件变动,更新缓存59
AggregateCacheDependency aggregateCacheDependency60
= new AggregateCacheDependency();61

62
string pathToWebConfig63
= HttpContext.Current.Server.MapPath("~/Web.config");64

65
aggregateCacheDependency.Add(new CacheDependency(pathToWebConfig));66

67
//把当前类加入到缓存中68
System.Web.HttpRuntime.Cache.Insert(69
"mojoIndexBuilderConfiguration",70
indexBuilderConfig,71
aggregateCacheDependency,72
DateTime.Now.AddYears(1),73
TimeSpan.Zero,74
System.Web.Caching.CacheItemPriority.Default,75
null);76

77
//返回当前类的信息。78

79
return (IndexBuilderConfiguration)HttpRuntime.Cache["mojoIndexBuilderConfiguration"];80

81
}82
catch (HttpException ex)83
{84
log.Error(ex);85

86
}87
catch (System.Xml.XmlException ex)88
{89
log.Error(ex);90

91
}92
catch (ArgumentException ex)93
{94
log.Error(ex);95

96
}97
catch (NullReferenceException ex)98
{99
log.Error(ex);100

101
}102

103
return null;104

105
106
}107

108

109
//从Xml文件中获取信息110
public void LoadValuesFromConfigurationXml(XmlNode node)111
{112
foreach (XmlNode child in node.ChildNodes)113
{114
if (child.Name == "providers")115
{116
foreach (XmlNode providerNode in child.ChildNodes)117
{118
//在providers的子结点中,如果类型为add,并且name,type属性不为空,则添加到ProviderSettingsCollection集合中119
if (120
(providerNode.NodeType == XmlNodeType.Element)121
&& (providerNode.Name == "add")122
)123
{124
if (125
(providerNode.Attributes["name"] != null)126
&& (providerNode.Attributes["type"] != null)127
)128
{129
ProviderSettings providerSettings130
= new ProviderSettings(131
providerNode.Attributes["name"].Value,132
providerNode.Attributes["type"].Value);133

134
providerSettingsCollection.Add(providerSettings);135
}136

137
}138
}139

140
}141
}142
}143

144

145
}配置文件实例如下:
<?xml version="1.0" encoding="utf-8" ?>
<IndexBuilderProviders>
<providers>
<add name="BlogIndexBuilderProvider"
type="mojoPortal.Business.WebHelpers.BlogIndexBuilderProvider, mojoPortal.Business.WebHelpers"
description="An IndexBuilder to index blog content for Lucene.NET Search Engine" />
</providers>
</IndexBuilderProviders>
<?xml version="1.0" encoding="utf-8" ?>
<IndexBuilderProviders>
<providers>
<add name="GalleryImageIndexBuilderProvider"
type="mojoPortal.Business.WebHelpers.GalleryImageIndexBuilderProvider, mojoPortal.Business.WebHelpers"
description="An IndexBuilder to index Gallery content for Lucene.NET Search Engine" />
</providers>
</IndexBuilderProviders>
<?xml version="1.0" encoding="utf-8" ?>
<IndexBuilderProviders>
<providers>
<add name="HtmlContentIndexBuilderProvider"
type="mojoPortal.Business.WebHelpers.HtmlContentIndexBuilderProvider, mojoPortal.Business.WebHelpers"
description="An IndexBuilder to index Html module content for Lucene.NET Search Engine" />
</providers>
</IndexBuilderProviders>

浙公网安备 33010602011771号