我試圖用嵌套元素進行配置。 但親子關係是一對一,而不是一對多。 含義storageProvider可能只有一個nestedProvider。針對nestes配置元素的StackOverflowException
嵌套級別不受限制。
...
<store storeName="123">
<storageProvider type="disk">
<nestedProvider type="share">
<nestedProvider type="amazon-s3">
</nestedProvider>
</nestedProvider>
</storageProvider>
</store>
...
問題 當我創建StorageProviderElement與NestedProvider財產,並嘗試讀取配置我趕上StackOverflowException在mscorlib中。好像有一個錯誤在.NET(使用.NET 4.5 IM)
我做得不對,或者是預期的行爲?
在這一點上,我不得不改變這個屬性爲一個集合(就像你以任何其他方式做),但我仍然想知道爲什麼我不能製作嵌套的一對一元素。
代碼: StoreElement
public class StoreElement : ConfigurationElement
{
private const string storeName = "storeName";
private const string storageProvider = "storageProvider";
[ConfigurationProperty(storeName, IsKey = true, IsRequired = true)]
public string StoreName
{
get
{
return (string)base[storeName];
}
}
[ConfigurationProperty(storageProvider, IsRequired = true)]
public StorageProviderElement StorageProvider
{
get
{
return (StorageProviderElement)this[storageProvider];
}
}
}
StorageProviderElement (這是一個遞歸)
public class StorageProviderElement : ConfigurationElement
{
private const string type = "type";
private const string options = "options";
private const string nestedProvider = "nestedProvider";
[ConfigurationProperty(type, IsRequired = true)]
public string Type
{
get
{
return (string)base[type];
}
}
[ConfigurationProperty(options, IsDefaultCollection = false, IsRequired = false)]
public GenericConfigurationElementCollection<StorageProviderOptionElement> Options
{
get
{
return (GenericConfigurationElementCollection<StorageProviderOptionElement>) this[options];
}
}
// this is what trigger stack overflow exception
[ConfigurationProperty(nestedProvider, IsDefaultCollection = false, IsRequired = false)]
public StorageProviderElement NestedProvider
{
get
{
return (StorageProviderElement)this[nestedProvider];
}
}
}
UPDATE: 匹明顯的救援。 教育屏幕截圖超過受教育的downvoting首席技術官:
你不能看到堆疊EASEYLLY。
你正在自己造成'StackOverflowException'。在調試器中查看調用堆棧。 –
@PatrickHofman沒有我不是,看屏幕。 – ADOConnection
是的,你是......什麼是調用堆棧? –