ASP.NET Web应用程序Azure设置

问题描述:

我们目前正在重构我们的ASP.NET 4.0 Web应用程序以在普通旧IIS和Azure上运行。对于设置(在Properties命名空间),我想实现State PatternAzureSettingsStateStandaloneSettingsState,它们都提供设置getter方法。ASP.NET Web应用程序Azure设置

现在有谁能帮我弄清楚ASP.NET如何反序列化非字符串值(例如TimeSpanStringCollection),这样我就可以在上下文类中自己反序列化它们了吗?所有设置似乎都是字符串。

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

我做了这样的事情,还是不知道,如果它的工作原理: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); } 
     } 
    } 

不要忘记告诉Azure中使用它!

static AzureConfig _config = new AzureConfig(); 

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

    } 

如果你使用它让我知道,我要得到报酬......我的意思是我想知道,如果它的工作原理:d