我创建了一个继承自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
文件,以添加sectionGroup
和section
元素,如下所示:
<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>
元素,则该应用无法运行。我很困惑,有什么帮助吗?
答案 0 :(得分:1)
您可能没有使用配置?
如果您没有使用它,它只会检查根节点是否通过configSections
注册,但它不会查看当时的详细信息。
当您使用ConfigurationManager.GetSection
实际加载它时,将验证设置,并且在此配置的情况下,它将触发一个异常,告知所需的YourAge
属性丢失。