using System;
using System.Configuration;
using System.Linq.Expressions;
using Developpez.Dotnet.Linq;
using JetBrains.Annotations;
namespace Developpez.Dotnet.Configuration
{
///
/// Fournit des méthodes en rapport avec la configuration et les paramètres d'application.
///
public static class ConfigurationExtension
{
///
/// Met à jour les paramètres de l'application depuis une version précédente si nécessaire.
///
/// Type qui gère l'accès aux paramètres d'application
/// Objet qui gère l'accès aux paramètres d'application (par exemple Settings.Default ou My.Settings)
/// Nom du paramètre indiquant si les paramètres d'application ont été mis à jour
/// Pour utiliser cette méthode, vous devez définir dans vos paramètres d'application un paramètre de type
/// dont la valeur par défaut est false, et indiquer son nom à la méthode via le paramètre upgradeFlagName. La mise à
/// jour sera effectuée si et seulement si ce paramètre d'application vaut false, et la valeur sera mise à true pour indiquer que
/// la mise à jour a été effectuée.
public static void UpgradeIfRequired(
[NotNull] this TSettings settings,
[NotNull] string upgradeFlagName)
where TSettings : ApplicationSettingsBase
{
settings.CheckArgumentNull("settings");
upgradeFlagName.CheckArgumentNull("upgradeFlagName");
bool flag = (bool)settings[upgradeFlagName];
if (!flag)
{
settings.Upgrade();
settings[upgradeFlagName] = true;
settings.Save();
}
}
///
/// Met à jour les paramètres de l'application depuis une version précédente si nécessaire.
///
/// Type qui gère l'accès aux paramètres d'application
/// Objet qui gère l'accès aux paramètres d'application (par exemple Settings.Default ou My.Settings)
/// Expression qui renvoie le paramètre indiquant si les paramètres d'application ont été mis à jour
/// Pour utiliser cette méthode, vous devez définir dans vos paramètres d'application un paramètre de type
/// dont la valeur par défaut est false, et l'indiquer à la méthode via le paramètre upgradeFlagSelector. La mise à
/// jour sera effectuée si et seulement si ce paramètre d'application vaut false, et la valeur sera mise à true pour indiquer que la
/// mise à jour a été effectuée.
public static void UpgradeIfRequired(
[NotNull] this TSettings settings,
[NotNull] Expression> upgradeFlagSelector)
where TSettings : ApplicationSettingsBase
{
settings.CheckArgumentNull("settings");
upgradeFlagSelector.CheckArgumentNull("upgradeFlagSelector");
var upgradeFlagName = LinqHelper.GetPropertyName(upgradeFlagSelector);
settings.UpgradeIfRequired(upgradeFlagName);
}
}
}