Je tente d'effectuer une configuration avec des éléments imbriqués. mais la relation parent-enfant est un-à-un, pas un-à-plusieurs. Signification storageProvider peut avoir un seul nestedProvider.StackOverflowException pour les éléments de configuration nestes
Le niveau d'imbrication n'est pas limité.
...
<store storeName="123">
<storageProvider type="disk">
<nestedProvider type="share">
<nestedProvider type="amazon-s3">
</nestedProvider>
</nestedProvider>
</storageProvider>
</store>
...
Question Lorsque je crée StorageProviderElement la propriété NestedProvider et essayer de lire la configuration que j'attraper StackOverflowException dans mscorlib. Comme il y a un bogue dans .NET (im en utilisant .NET 4.5)
que je fais quelque chose de mal ou ce comportement est normal?
À ce stade, j'ai dû changer cette propriété à une collection (comme vous le faites de toute autre manière) mais je me demande encore pourquoi je ne peux pas faire des éléments imbriqués un-à-un.
code: 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 (c'est celui avec récursivité)
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];
}
}
}
MISE À JOUR: Capitan évidente à la rescousse. Capture d'écran éducative pour CTOs downvoting éduqués:
VOUS NE POUVEZ PAS VOIR STACK EASEYLLY.
Vous provoquez le 'StackOverflowException' vous-même. Voir la pile des appels dans le débogueur. –
@PatrickHofman non im non, voir écran. – ADOConnection
Oui, vous êtes ... Quelle est la pile d'appels? –