ConfigurationManager.GetSection всегда дает объект со значениями по умолчанию

Вот класс ConfigurationSection

using System.Configuration;

namespace CampusWebStore.Config
{
    public class PoolerConfig : ConfigurationSection
    {
        [ConfigurationProperty("PoolId", IsRequired = true)]
        public string PoolId { get; set; }
        [ConfigurationProperty("Host", IsRequired = true)]
        public string Host { get; set; }
        [ConfigurationProperty("Port", IsRequired = true)]
        public int Port { get; set; }
        [ConfigurationProperty("Enabled", IsRequired = true)]
        public bool Enabled { get; set; }
    }
}

Определение раздела web.config

<section name="PoolerConfig" type="CampusWebStore.Config.PoolerConfig, CampusWebStore"/>

Актуальный раздел

<PoolerConfig
    PoolId="asdf-asdf-asdf-asdf"
    Host="localhost"
    Port="5000"
    Enabled="true"
  />

А затем строка, которая загружает его (в Global.asax.cs)

PoolerConfig poolerConfig = ConfigurationManager.GetSection("PoolerConfig") as PoolerConfig;

Похоже, что независимо от того, что я делаю, все свойства в моем PoolerConfig являются значениями по умолчанию (нулевые строки, 0 целых и т. Д.). Исследования показывают, что это должно быть легко, как пирог, но безрезультатно, я не могу понять это.

1 ответ

Решение

Вы не можете использовать get/set покровители для свойств конфигурации. Вы должны получить доступ к базовому классу, чтобы манипулировать свойствами. См. Пример http://msdn.microsoft.com/en-us/library/2tw134k3(v=vs.100).aspx.

Изменить:

 [ConfigurationProperty("PoolId", IsRequired = true)]
 public string PoolId { get; set; }

Для того, чтобы:

 [ConfigurationProperty("PoolId", IsRequired = true)]
 public string PoolId 
 {
    get { return (string)this["PoolID"]; }
    set { this["PoolID"] = value; }
 }
Другие вопросы по тегам