引用项目中的ASP.NET Custom ConfigurationSection不起作用?

时间:2011-05-21 15:57:59

标签: c# .net asp.net asp.net-mvc asp.net-mvc-3

我创建了一个继承自System.Configuration.ConfigurationSection的自定义类,这样实现(这显然只是为了让实际配置运行):

public class Config : ConfigurationSection
{
    [ConfigurationProperty("quoteOfTheDay", DefaultValue = "It is what it is.", IsRequired = false)]
    public string QuoteOfTheDay
    {
        get
        {
            return this["quoteOfTheDay"] as string;
        }
    }

    [ConfigurationProperty("yourAge", IsRequired = true)]
    public int YourAge
    {
        get
        {
            return (int)this["yourAge"];
        }
    }
}

该类的完整命名空间+名称是MyApp.Core.Config,它位于MyApp.Core项目中,该项目编译为MyApp.Core.dll程序集。然后我从我的ASP.NET / MVC3项目中引用了这个项目,该项目名为MyApp.UI。我已编辑Web.config文件,以添加sectionGroupsection元素,如下所示:

  <configSections>
    <sectionGroup name="myAppConfigGroup">
      <section name="myAppSection" 
           type="MyApp.Core.Config, MyApp.Core, Version=1.0.0.0, Culture=neutral, PublicKey=null" 
           allowLocation="true" 
           allowDefinition="Everywhere" />
    </sectionGroup>
  </configSections>

  <myAppConfigGroup>
    <myAppSection>

    </myAppSection>
  </myAppConfigGroup>

但是,在编辑配置时,类似MyApp.Core.Config似乎不会用于验证配置或提供智能感。以下是我所做的一些观察:

  • 我将yourAge属性定义为IsRequired = true,如果没有它,应用程序运行正常。
  • 我甚至可以在<section>元素中更改类型(对于某些甚至不存在的类型,如Foo.Bar),一切都运行良好
  • 但如果删除<section>元素,则该应用无法运行。

我很困惑,有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您可能没有使用配置? 如果您没有使用它,它只会检查根节点是否通过configSections注册,但它不会查看当时的详细信息。

当您使用ConfigurationManager.GetSection实际加载它时,将验证设置,并且在此配置的情况下,它将触发一个异常,告知所需的YourAge属性丢失。