Get multiple instances of the same key within custom section
在app.config文件中,我在
1 2 3 4 5 | <setion1> </section1> |
我使用下面的代码从读取条目中获取
1 | var list = (NameValueCollection)ConfigurationManager.GetSection("section1"); |
我希望此代码返回该部分下的每个条目,但是它似乎只返回与键相关的唯一值。不管钥匙是什么,我怎么收集
钥匙的定义必须是不合格的。
"我必须在app.config中存储邮件收件人。每个分区都有自己的mail to和cc条目列表,分区名称指定要将邮件发送到哪个组。"
那么您就没有一堆密钥/邮件对了。
您有一堆密钥/邮件[]对。
对于每个键,都有一组值。所以使用一组值。答案是:https://stackoverflow.com/a/1779453/3346583
当然,在这种情况下,可伸缩性可能是一个问题。但是,如果您需要可伸缩性,那么无论如何,您应该将其作为数据库/XML文件/其他数据结构中的1:N关系来解决。而不是app.onfig条目。
不应使用
您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using System; using System.Configuration; using System.Collections.Generic; using System.Xml; using KeyValue = System.Collections.Generic.KeyValuePair<string, string>; namespace YourNamespace { public sealed class KeyValueHandler : IConfigurationSectionHandler { public object Create(object parent, object configContext, XmlNode section) { var result = new List<KeyValue>(); foreach (XmlNode child in section.ChildNodes) { var key = child.Attributes["key"].Value; var value = child.Attributes["value"].Value; result.Add(new KeyValue(key, value)); } return result; } } } |
配置:
1 2 3 4 5 6 7 8 | <configSections> <section name="section1" type="YourNamespace.KeyValueHandler, YourAssembly" /> </configSections> <setion1> </section1> |
用途:
2