配置部分未加载

时间:2015-11-04 17:47:39

标签: c# web-config

我在web.config中声明了我的配置部分(在configSection元素中):

<section name="gmailEmail" type="MyApp.Communication.Sections.GmailSection" allowLocation="true" allowDefinition="Everywhere" />

用法:

<gmailEmail>
  <from emailAddress="pat.wasiewicz@gmail.com" name="MyApp"></from>
  <server password="mysuperpass">
</gmailEmail>

我的配置模型:

public class GmailSection : ConfigurationSection
{
    [ConfigurationProperty("server")]
    public ServerElement Server { get; set; }

    [ConfigurationProperty("from")]
    public FromElement From { get; set; }
}

public class ServerElement : ConfigurationElement
{


    [ConfigurationProperty("host", DefaultValue = "smtp.gmail.com", IsRequired = false)]
    public string Host { get; set; }

    [ConfigurationProperty("port", DefaultValue = 587, IsRequired = false)]
    public int Port { get; set; }

    [ConfigurationProperty("ssl", DefaultValue = true, IsRequired = false)]
    public bool Ssl { get; set; }

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

public class FromElement : ConfigurationElement
{
    [ConfigurationProperty("emailAddress", IsRequired = true)]
    public string EmailAddress { get; set; }

    [ConfigurationProperty("name", IsRequired = false)]
    public string Name { get; set; }
}

不幸的是,有一个问题:

var configSection = (GmailSection)ConfigurationManager.GetSection("gmailEmail");

configSection.ServernullconfigSection.Fromnull。为什么呢?

1 个答案:

答案 0 :(得分:1)

配置部分的类型名称缺少程序集名称

<section name="gmailEmail" type="MyApp.Communication.Sections.GmailSection, MyApp" allowLocation=.....

服务器/密码元素缺少关闭标记(/&gt;)

<server password="mysuperpass" />

但我认为这些都是错别字。

你应该改变你所有的{得到;组;使用相同的键调用基类的索引器的属性实现。我已经实现了GmailSection类,您可以用同样的方式修改ServerElement和FormElement类。

public class GmailSection : ConfigurationSection
{
    [ConfigurationProperty("server")]
    public ServerElement Server
    {
        get
        {
            return (ServerElement)this["server"];
        }
        set
        {
            this["server"] = value;
        }
    }

    [ConfigurationProperty("from")]
    public FromElement From
    {
        get
        {
            return (FromElement)this["from"];
        }
        set
        {
            this["from"] = value;
        }
    }
}