2010-12-06 20 views
0

Nous sommes actuellement en train de refactoriser notre application Web ASP.NET 4.0 pour s'exécuter sur les anciens services IIS et Azure. Pour les paramètres (dans l'espace de noms Properties), je voudrais implémenter le State Pattern avec un AzureSettingsState et un StandaloneSettingsState, qui fournissent tous les deux des méthodes de getter.Paramètres Azure de l'application Web ASP.NET

Maintenant, est-ce que quelqu'un pourrait m'aider à comprendre comment ASP.NET désérialise les valeurs non-String (par exemple TimeSpan ou StringCollection), afin que je puisse les désérialiser moi-même dans la classe de contexte? Tous les paramètres semblent être des chaînes.

public abstract class ConfigStateBase 
{ 
    public abstract string GetSettingValue(string setting); 
} 

Répondre

0

Je l'ai fait quelque chose comme ça, ne savent toujours pas si cela fonctionne: D

public class AzureConfig:StandaloneConfig 
{ 
    protected override string GetAppSetting(string name) 
    { 
     return RoleEnvironment.GetConfigurationSettingValue(name); 
    } 

    protected override string GetConnectionString(string name) 
    { 
     return RoleEnvironment.GetConfigurationSettingValue(name); 
    } 
} 

public class StandaloneConfig 
{ 
    public IndexedSetting AppSettings { get; private set; } 
    public IndexedSetting ConnectionStrings { get; private set; } 

    public StandaloneConfig() 
    { 
     AppSettings = new IndexedSetting(GetAppSetting); 
     ConnectionStrings = new IndexedSetting(GetConnectionString); 
    } 

    protected virtual String GetAppSetting(String name) 
    { 
     return ConfigurationManager.AppSettings[name]; 
    } 

    protected virtual String GetConnectionString(String name) 
    { 
     var cs = ConfigurationManager.ConnectionStrings[name]; 
     if (cs != null) 
      return cs.ConnectionString; 
     else 
      return null; 
    } 

    public class IndexedSetting 
    { 
     Func<String, String> _getParameter; 

     public IndexedSetting(Func<String,String> getParameter) 
     { 
      _getParameter = getParameter; 
     } 

     public String this[String name] 
     { 
      get { return _getParameter(name); } 
     } 
    } 

Ne pas oublier de dire Azure à l'utiliser!

static AzureConfig _config = new AzureConfig(); 

    void Application_Start(object sender, EventArgs e) 
    { 
     Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) => 
     { 
      configSetter(_config.AppSettings[configName]); 
     }); 

    } 

Si vous l'utilisez laissez-moi savoir, je veux être payé ... Je veux dire que je veux savoir si cela fonctionne: D