3

我正在尝试为我目前参与的 asp.net 项目实施自定义配置解决方案。

这是配置声明

    <sectionGroup name="WebsiteConfig" type="{namespace}.{class}, {assembly}">
        <section name="Languages" type="{namespace}.{class}, {assembly}"/>
        <section name="LinkFormats" type="{namespace}.{class}, {assembly}"/>
        <section name="Countries" type="{namespace}.{class}, {assembly}"/>
    </sectionGroup>

这是我尝试使用的实际配置

<WebsiteConfig>

    <Languages>
        <Language code="en" domain="...">
            <Theme .../>
            <SiteMap ..."/>
        </Language>
        <Language code="de" domain="...">
            <Theme .../>
            <SiteMap .../>
        </Language>
    </Languages>

    <Countries>
        <Country Code="UK">
            <Files>
                <File name="..." fileUrl="..." enabled="true" />
                <File ... />
            </Files>
            <Messages>
                <Message Enabled="true" Message="..." />
                <Message ... />
            </Messages>
        </Country>
        <Country Code="...">....</Country>
    </Countries>

    <LinkFormats UseRewrites="false">
        <Link name="..." format="..." formatRewrite=".../"/>
        <link .... />
    </LinkFormats>

</WebsiteConfig>

我遇到的问题是 Country 元素(ConfigurationElement)内的 Files 和 Messages 集合抛出了一个 Unrecognized 元素“File”等。

我的国家/地区元素具有以下文件和消息属性

    [ConfigurationProperty("Files")]
    public FilesSection Files
    {
        get
        {
            return (FilesSection)this["Files"];
        }
        set
        {
            this["Files"] = (object)value;
        }
    }

    [ConfigurationProperty("Messages")]
    public MessagesSection Messages
    {
        get
        {
            return (MessagesSection)this["Messages"];
        }
        set
        {
            this["Messages"] = (object)value;
        }
    }

FilesSection 和 MessagesSection 都派生自 ConfigurationElement,具有类型 x 的默认集合,它是派生自 ConfigurationElement 的项的集合。

有没有人知道我哪里出错了?

我是否需要将 Country 和 Country 转换为 SectionGroup,然后将 Files 和 Messages 转换为 Section?

4

2 回答 2

4

基于这篇文章http://www.endswithsaurus.com/2008/11/custom-configuration-section.html我发现我需要设置 ElementName 因为父级不是部分处理程序的嵌套集合不会遵守“AddItemName”用于设置子元素。

于 2010-11-26T14:08:05.617 回答
0

Instead of setting the internal member variable for Element Name like in the article you supplied you can instead override the ElementName property with your custom name:

public class MySettings : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new MySetting();
    }
    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((MySetting)element).Name;
    }

    protected override string ElementName
    {
        get { return “MySetting”; }
    }

    ...

See the article here for more detail:

于 2011-05-03T13:38:49.047 回答