我创建了一个自定义配置部分来存储项目列表。配置如下:
<configSections>
<section name="Items" type="namespace.Items, namespace"/>
</configSections>
<Items>
<Item name="Item1"/>
<Item name="Item2"/>
</Items>
我还创建了自己的配置处理程序,如下所示:
public class ItemConfigurationHandler : IConfigurationSectionHandler
{
public ItemConfigurationHandler()
{
}
public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
List<Item> items = new List<Item>();
System.Xml.XmlNodeList items = section.SelectNodes("Item");
foreach (XmlNode i in items)
{
Item item = new Item();
item.Name = i.Attributes["name"].InnerText;
items.Add(item);
}
return items;
}
}
目前工作正常,我可以从配置中检索项目列表,如下所示:
List<Item> ts = (List<Item>)ConfigurationManager.GetSection("Items");
我想知道,是否有可能只检索一个项目?例如,如果我想要&#34; Item1&#34;的详细信息。只要。我可以成功检索列表,然后过滤name =&#34; Item1&#34;但这意味着加载所有的XML似乎有点多,如果只想要列表中的一个项目,特别是当这个列表增长时,我不想加载20个项目,如果我只需要一个,或者这不是一个问题?< / p>
答案 0 :(得分:2)
您是否需要在web.config
中存储这些项目?概念上,web.config
文件用于配置设置。如果您打算以编程方式读取/写入此文件,是否可以将数据存储在您自己的自定义 xml文件中并从那里解析数据?
编辑:由于您的评论建议您将这些项目保留在web.config中,因此我不认为检索整个列表并迭代到找到必要的价值。您可以为<appSettings>
标记添加值,也可以单独访问它们。
e.g:
<appSettings>
<add key="item1" value="item1 value"/>
<add key="item2" value="item2 value"/>
. . .
<add key="item20" value="item20 value"/>
</appSettings>
像这样访问它:
var item1Value = ConfigurationManager.AppSettings["item1"];
但是,如果你只是阅读这些信息,我不清楚你为什么要开始将它们放在配置文件中。在代码中定义这些变量可能更容易。
答案 1 :(得分:2)
我想说这不是一个大问题 - 加载1对20你不会在今天的机器上看到一个昙花一现,除非你有嵌套的XML配置。
ConfigurationManager也会缓存这些值,因此一旦查询配置部分,它们就会保留在内存中以供后续请求使用。您可以使用ConfigurationManager.RefreshSection("Items")
刷新缓存。