2

次のカスタム構成セクションをマップする方法を見つける/理解するのに問題があります。

<section>
    <collection1>
        <subitem1 ... />
        <subitem1 ... />
    </collection1>
    <collection2>
        <subitem2 ... />
        <subitem2 ... />
    </collection2>
</section>

単一のサブコレクションの場合、次のように機能します。

public class Section : ConfigurationSection
{
    [ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]
    [ConfigurationCollection(typeof(SubItem1Collection), AddItemName = "collection1")]
    public SubItem1Collection Collection1
    {
        get { return (SubItem1Collection)this[string.Empty]; }
        set { this[string.Empty] = value; }
    }
}

2 番目のコレクションを追加しようとすると、実行されません。

public class Section : ConfigurationSection
{
    [ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]
    [ConfigurationCollection(typeof(TemplateCollection), AddItemName = "collection1")]
    public SubItem1Collection Collection1
    {
        get { return (SubItem1Collection)this[string.Empty]; }
        set { this[string.Empty] = value; }
    }

    [ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]
    [ConfigurationCollection(typeof(SubItem2Collection), AddItemName = "collection2")]
    public SubItem2Collection Collection2
    {
        get { return (SubItem2Collection)this[string.Empty]; }
        set { this[string.Empty] = value; }
    }
}

エラーは次のとおりです。

タイプ「SubItem1Collection」のオブジェクトをタイプ「SubItem2Collection」にキャストできません。

エラーは明らかに indexer にありthis[string.Empty];ます。誰かがこれについて正しい方向に私を向けることができますか?

4

1 に答える 1

3

デフォルト コレクションを 2 つ持つことはできません。構成クラスを xml サンプルと一致させるには、単に "" ではなく "collection1" と "collection2" という名前をそれぞれ割り当て、ConfigurationProperty 属性で IsDefaultCollection を false に設定し、AddItemName を "subitem1" と "subitem2" に設定する必要があります。 " ConfigurationCollection 属性の場合。また、2 番目のコレクションのタイプについて @thymine が指摘した内容を修正します。

于 2012-11-15T23:21:27.127 に答える