1
我從app.config中讀取一個簡單的集合:將配置節作爲.NET ConfigurationCollection讀取後,是否可以返回不同的類型?
<MongoInstances>
<MongoInstance serverAddress="server1" />
<MongoInstance serverAddress="server2" />
</MongoInstances>
爲以下領域
[ConfigurationProperty("MongoInstances")]
[ConfigurationCollection(typeof(MongoInstancesCollection), AddItemName = "MongoInstance")]
public MongoInstancesCollection ServerUrls
{ ...
}
預期其工作,返回在MongoInstancesCollection對象在app.config信息。
我想這個領域是不同的類型和收集對象轉換爲IEnumerable如下:
[ConfigurationProperty("MongoInstances")]
[ConfigurationCollection(typeof(MongoInstancesCollection), AddItemName = "MongoInstance")]
public IEnumerable<MongoServerAddress> ServerUrls
{
get
{
IList<MongoServerAddress> result = new List<MongoServerAddress>();
var collection = (MongoInstancesCollection)this["MongoInstances"];
foreach (MongoInstance instance in collection)
{
result.Add(new MongoServerAddress(instance.Address));
}
return result;
}
}
但我得到以下異常:
System.Configuration.ConfigurationErrorsException : Property 'MongoInstances' is not a ConfigurationElement.
Google搜索它,發現如果我手動設置屬性並從字段定義中刪除ConfigurationProperty屬性,它將消失:
Properties.Add(new ConfigurationProperty("MongoInstances", typeof(MongoInstancesCollection), new MongoInstancesCollection()));
但現在我得到一個新的異常,我無法弄清楚如何補救:
System.Configuration.ConfigurationErrorsException : Unrecognized element 'MongoInstance'
任何幫助將不勝感激!謝謝!
我的集合已經實現IEnumerable。另外,在你引用的博客文章中,作者仍然擁有ConfigurationElementCollection作爲他的集合的返回類型,這正是我想要避免的。 –