Невозможно прочитать в моем пользовательском разделе.config
ПРИМЕЧАНИЕ: это очень похоже на этот вопрос, но мне нужна дополнительная помощь.
я пытаюсь сделать следующий раздел в моем файле.config, но я получаю исключение при попытке доступа к этому разделу.
файл.config
<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")
is бросает следующее исключение:
Произошла ошибка при создании обработчика раздела конфигурации для foos: тип "Ackbar.Mvc.Models.Foos.FooCollection" не наследуется от "System.Configuration.IConfigurationSectionHandler".
Может кто-нибудь, пожалуйста, помогите мне? Я не хочу обернуть коллекцию ВНУТРИ родительского раздела.
Ура:)
2 ответа
Вы должны реализовать IConfigurationSectionHandler
, Обойти это невозможно.
Тем не менее, вы можете позволить FooCollection
реализовать этот интерфейс, а также.
Свойство атрибута IsDefaultCollection также может пригодиться.
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
}