2

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

<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");

但是我想知道,是否可以只检索单个项目?例如,如果我只想要“Item1”的详细信息。我可以成功检索列表,然后过滤 where name = "Item1" 但这意味着加载所有 XML 如果只想要列表中的一个项目,这似乎有点多,特别是随着这个列表的增长,我不想加载 20 个项目如果我只需要一个,或者这不是什么大问题?

4

2 回答 2

2

您是否有理由需要将这些项目存储在web.config? 从概念上讲,该web.config文件用于配置设置。如果您计划以编程方式读/写此文件,您能否将数据存储在您自己的自定义xml 文件中并从那里解析数据?

编辑:由于您的评论表明您希望将这些项目保留在 web.config 中,因此我认为检索整个列表并遍历以找到必要的值并不是一个主要问题。您可以向<appSettings>标签添加值并单独访问它们。

例如:

<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"];

但是,如果您只是阅读此信息,我不清楚您为什么要将它们放在配置文件中。在代码中定义这些变量可能更容易。

于 2012-08-10T14:05:57.927 回答
2

我想说这不是一个大问题 - 加载 1 对 20 除非您有嵌套的 XML 配置,否则您不会在今天的机器上看到一个亮点。

ConfigurationManager还会缓存这些值,因此一旦您查询配置部分,它们就会保留在内存中以供后续请求使用。您可以使用ConfigurationManager.RefreshSection("Items")来刷新缓存。

于 2012-08-10T14:09:47.593 回答