从自定义Web配置部分读取单个项目

时间:2012-08-10 14:00:35

标签: c# config

我创建了一个自定义配置部分来存储项目列表。配置如下:

<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>

2 个答案:

答案 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")刷新缓存。