2010-12-06 140 views
0

我們目前正在重構我們的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); 
} 

回答

0

我做了這樣的事情,還是不知道,如果它的工作原理: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

相關問題