En essayant de gérer (en interne) les exceptions KeyValueConfigurationCollection
lorsqu'une valeur de l'indexeur n'existe pas, j'ai une erreur.Impossible de transtyper KeyValueConfigurationCollection en classe dérivée
public class ConfigCore
{
public static Configuration config
{
get
{
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "App.config");
return ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
}
}
public static SettingsManager Settings
{
get
{
//config is an instance of System.Configuration.Configuration and works well.
return (SettingsManager) config.AppSettings.Settings;
}
}
internal static KeyValueConfigurationCollection Setts
{
get
{
return config.AppSettings.Settings;
}
}
public static void CreateSettingEntry(string key, string value)
{
try
{
Setts.Add(key, value);
}
catch (Exception ex)
{
Console.WriteLine("Error ocurred trying to add value to Config. Message: {0}", ex.ToString());
}
}
}
public class SettingsManager : KeyValueConfigurationCollection
{
public KeyValueConfigurationElement this[string key]
{
get
{
if (ConfigCore.Setts[key] == null)
ConfigCore.CreateSettingEntry(key, "");
return ConfigCore.Setts[key];
}
}
}
Je veux éviter que l'utilisateur ne la chose suivante en utilisant mon API:
if(ConfigCore.Settings["key"] == null)
ConfigCore.CreateSettingEntry("key", "");
ConfigCore.Settings["key"].Value = "value";
Et par cette raison que j'ai créé un indexeur interne pour rechercher ce cas et appeler automatiquement la méthode crée l'entrée avant de la définir.
Mais pour une raison quelconque, une exception en disant que KeyValueConfigurationCollection
se produit ne peut pas être casté dans SettingsManager
, pourquoi, si une classe de paramètres n'est héritée de KeyValueConfigurationCollection
, ce que j'oublie?
Merci d'avance!
L'idée est de trouver un compte interne, qui est disponible à ce jour (à partir du 18 janvier 2018). –