2013-06-25 41 views
2

這裏是的ConfigurationSection類ConfigurationManager.GetSection總是給人對象使用默認值

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整數等)。研究表明這應該很容易,但無濟於事我無法弄清楚這一點。

回答

4

您無法使用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; } 
} 
+0

這是肯定的答案。我一定是被以前的開發者拋棄了。他做了一些稍微不同的事。他用正常的get/set backers定義了他的ConfigurationSection類,但是使用configSource屬性將它作爲xml文件加載到web.config中。謝謝您的幫助。 – pixelshaded