Невозможно прочитать в моем пользовательском разделе .config - PullRequest
3 голосов
/ 24 февраля 2010

ПРИМЕЧАНИЕ: это очень очень похоже на ТАК вопрос , но мне нужна дополнительная помощь.

Я пытаюсь создать следующий раздел в моем файле .config, но я получаю исключение при попытке доступа к этому разделу.

.config file

<configSections>
    <section name="foos" type="Ackbar.Mvc.Models.Foo.FooCollection, Ackbar.Mvc" requirePermission="false"/>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" />
</configSections>

<foos>
    <add name="aaa" something="zzz"/>
    <add name="bbb" something="yyy"/>
    <add name="ccc" something="xxx"/>
</foos>

Хорошо, значит, мне нужно сделать два класса

классы

public class FooCollection : ConfigurationElementCollection
{
    ... with my custom overrides, etc. ...
}

и

public class FooElement : ConfigurationElement
{
    [ConfigurationProperty("Name", IsRequired = true)]
    public string Name { .. }

    [ConfigurationProperty("Something ", IsRequired = true)]
    public string Something { .. }

    [ConfigurationProperty("IsDefault ", IsRequired = false, DefaultValue = false)]
    public bool IsDefault { .. }
}

Kewl. Теперь, когда я делаю следующее ....

var whatever = ConfigurationManager.GetSection("foos") - выдает следующее исключение: -

Произошла ошибка при создании обработчик раздела конфигурации для foos: Тип 'Ackbar.Mvc.Models.Foos.FooCollection' не наследуется от 'System.Configuration.IConfigurationSectionHandler'.

Может кто-нибудь, пожалуйста, помогите мне? Я не хочу оборачивать коллекцию ВНУТРИ родительского раздела.

Приветствия:)

Ответы [ 2 ]

2 голосов
/ 24 февраля 2010

Вы должны реализовать IConfigurationSectionHandler. Обойти это невозможно.

Однако вы можете позволить вашему FooCollection также реализовать этот интерфейс.

Также может пригодиться свойство атрибута IsDefaultCollection .

0 голосов
/ 19 декабря 2018

FooCollection не является разделом, поэтому вы должны иметь расширение ConfigurationSection.

Хотя вам все равно нужно будет создать ConfigurationElementCollection в качестве резервной коллекции, вам просто нужно подключить его по-другому. Я бы назвал вещи немного по-другому с FooSection для самого раздела.

<configSections>
    <section name="foos" type="Ackbar.Mvc.Models.Foo.FooSection, Ackbar.Mvc" requirePermission="false"/>
</configSections>

<foos>
    <add name="aaa" something="zzz"/>
    <add name="bbb" something="yyy"/>
    <add name="ccc" something="xxx"/>
</foos>

И раздел:

public class FooSection : ConfigurationSection
{
    [ConfigurationProperty("", IsDefaultCollection=true)]
    public FooCollection Foos => (FooCollection)this[""];

    // optionally add convenience accessors to the `Foos` collection
}
...