web-dev-qa-db-fra.com

Comment obtenir toutes les valeurs de la clé appsettings qui commence par un nom spécifique et la transmettre à n'importe quel tableau?

Dans mon web.config fichier que j'ai

<appSettings>
    <add key="Service1URL1" value="http://managementService.svc/"/>
    <add key="Service1URL2" value="http://ManagementsettingsService.svc/HostInstances"/>
    ....lots of keys like above
</appSettings>

Je veux obtenir la valeur de la clé qui commence par Service1URL et passez la valeur à string[] repositoryUrls = { ... } dans ma classe C #. Comment puis-je atteindre cet objectif?

J'ai essayé quelque chose comme ça mais je n'ai pas pu saisir les valeurs:

foreach (string key in ConfigurationManager.AppSettings)
{
    if (key.StartsWith("Service1URL"))
    {
        string value = ConfigurationManager.AppSettings[key];            
    }

    string[] repositoryUrls = { value };
}

Soit je le fais mal, soit je manque quelque chose ici. Toute aide serait vraiment appréciée.

27
user2133617

J'utiliserais un peu LINQ:

string[] repositoryUrls = ConfigurationManager.AppSettings.AllKeys
                             .Where(key => key.StartsWith("Service1URL"))
                             .Select(key => ConfigurationManager.AppSettings[key])
                             .ToArray();
69
Ann L.

Vous écrasez le tableau pour chaque itération

List<string> values = new List<string>();
foreach (string key in ConfigurationManager.AppSettings)
        {
            if (key.StartsWith("Service1URL"))
            {
                string value = ConfigurationManager.AppSettings[key];
                values.Add(value);
            }

        }

string[] repositoryUrls = values.ToArray();
12
TGH

J'ai défini une classe pour contenir les variables qui m'intéressent et parcourir les propriétés et rechercher quelque chose dans app.config pour correspondre.

Ensuite, je peux consommer l'instance comme je le souhaite. Pensées?

public static ConfigurationSettings SetConfigurationSettings
{
    ConfigurationSettings configurationsettings = new   ConfigurationSettings();
    {
        foreach (var prop in  configurationsettings.GetType().GetProperties())
        {
            string property = (prop.Name.ToString());
            string value = ConfigurationManager.AppSettings[property];
            PropertyInfo propertyInfo = configurationsettings.GetType().GetProperty(prop.Name);
            propertyInfo.SetValue(configurationsettings, value, null);
        }
    }

    return configurationsettings;
 }
1
Pat