Настройки Azure веб-приложения ASP.NET - PullRequest
0 голосов
/ 06 декабря 2010

В настоящее время мы проводим рефакторинг нашего веб-приложения ASP.NET 4.0 для запуска на старых и старых IIS и Azure.Для параметров (в пространстве имен Properties) я хотел бы реализовать шаблон состояний *1003* с AzureSettingsState и StandaloneSettingsState, которые оба предоставляют методы получения параметров.

Теперь кто-нибудь может помочь мне понять, как ASP.NET десериализует нестроковые значения (например, TimeSpan или StringCollection), чтобы я мог десериализовать их самостоятельно в классе контекста?Все настройки кажутся там строками.

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

1 Ответ

0 голосов
/ 10 февраля 2011

Я сделал что-то вроде этого, все еще не знаю, работает ли это: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...