在web.config中访问configSection上的属性?

时间:2009-12-28 08:54:28

标签: .net asp.net web-config

解决方案:添加解决方案:sectionGroups似乎没有属性。正确的方法似乎是ConfigurationSection作为父项,ConfigurationElement作为每个孩子。收藏品也有ConfigurationElementCollection。 .net Framework中的一个示例:<roleManager>是一个Section,<providers>是一个ElementCollection。我blogged about my solution

原始问题:我的web.config中有自定义的sectionGroup:

<sectionGroup name="myApp" type="MyApp.MyAppSectionGroup">
  <section name="localeSettings" 
           type="MyApp.MyAppLocaleSettingsSection"/>
</sectionGroup>

sectionGroup本身应该有一个属性:

<myApp defaultModule="MyApp.MyAppTestNinjectModule">
  <localeSettings longDateFormat="MM/dd/yyyy HH:mm:ss" />
</myApp>

我无法访问该属性(defaultModule)。使用ConfigurationManager.GetSection("myApp/localeSettings")并将其转换为继承自ConfigurationSection的类,可以非常轻松地获取节。

但我似乎无法轻松访问sectionGroup,因为ConfigurationManager.GetSection("myApp")返回null。我尝试了ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).SectionGroups["myApp"],但这并没有实现一个索引器,可以让我访问defaultModule

我误解了什么吗? sectionGroups真的只是没有自己设置的容器吗?我可以在没有sectionGroup的情况下嵌套部分吗?并且OpenExeConfiguration适用于.net应用程序(使用web.config)还是仅适用于app.config?

编辑:感谢您提供有关WebConfigurationManager而非ConfigurationManager的提示。这并没有解决我的主要问题,但至少有更明智的命名OpenXXX方法。

目前,这是两个班级。 LocaleSettings工作得很好,只是SectionHandler不允许我访问“defaultModule”属性。

public class MyAppSectionGroup: ConfigurationSectionGroup
{
    [ConfigurationProperty("localeSettings")]
    public MyAppLocaleSettingsSection LocaleSettings
    {
        get
        {
            return Sections["localeSettings"] as MyAppLocaleSettingsSection;
        }
    }
}

public class MyAppLocaleSettingsSection: ConfigurationSection
{
    [ConfigurationProperty("longDateFormat", DefaultValue = "yyyy-MM-dd HH:mm")]
    public string LongDateFormat
    {
        get
        {
            return this["longDateFormat"] as string;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

我猜你几乎所有想做的事都应该是可能的,而且应该是合法的 - 你必须错过一些小事。我唯一不确定的是节组是否可以拥有自己的属性 - 它们可能被设计为只是部分的容器,然后在其中包含实际的配置数据......

要访问web.config,您还应该尝试使用WebConfigurationManager而不是“直接”ConfigurationManager(用于app.config文件)。

您能告诉我们MyApp.MyAppSectionHandlerMyApp.MyAppLocaleSettingsConfigurationSection的代码吗?

您是否在CodeProject上查看了Jon Rista关于.NET 2.0配置的三部分系列文章?这是一个很好的介绍如何使用和扩展.NET配置系统 - 强烈推荐,确实最有用!

如果您正在处理自定义配置部分,我还建议您查看Configuration Section Designer,这是一个Visual Studio插件,允许您直观地定义配置部分组和配置部分以及这些部分中的属性及其数据类型 - 节省时间和教育工具!

更多的挖掘表明:

  • 您可以在自定义配置节组中定义[ConfigurationProperty],但这些属性没有自动“后备存储”,我看不到任何方法可以挂钩加载XML配置文件,或者 - 所以我猜部分组实际上只是容器
  • 您可以将部分组彼此嵌套,但叶级必须是配置部分,并且除了配置部分组之外,它们不能嵌套在任何部分中。

马克