我創建了一個自定義配置部分來存儲項目列表。在配置如下:從自定義Web配置部分讀取單個項目
<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」的詳細信息。我可以成功地檢索列表,然後過濾名稱=「Item1」,但這意味着加載所有XML似乎有點多,如果只想從列表中的一個項目,特別是當這個列表增長,我不想加載20個項目如果我只需要一個,或者這不是什麼問題?
謝謝SliverNinja,我可能會堅持過濾項目列表。當ConfigurationManager緩存這些值時,您認爲這比將值存儲在單獨的文件中並編寫自己的方法來解析XML更快嗎? (我想這取決於我如何解析它?) – cast01 2012-08-10 14:13:28
這取決於您的配置有多複雜,需要多少靈活性以及是否執行自己的緩存。作爲代碼的未來維護者 - 我寧願你不要重新發明輪子(*支持.NET配置支持*)。我們有標準有一個原因,但總是有理由彎曲邊緣案例的規則。 – SliverNinja 2012-08-10 14:16:42
@SliverNinja這是一個邊緣情況? – Sam 2012-08-10 14:19:09