无法读取我的自定义.config部分

时间:2010-02-24 08:10:56

标签: .net configuration configurationelement

注意:这与此SO question非常相似,但我需要更多帮助。

我正在尝试在我的.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")会引发以下异常: -

  

创建时出错   配置节处理程序   foos:类型   'Ackbar.Mvc.Models.Foos.FooCollection'   不继承自   'System.Configuration.IConfigurationSectionHandler'。

有人可以帮帮我吗?我不想将集合INSIDE包装在父节中。

干杯:)

2 个答案:

答案 0 :(得分:2)

必须实施IConfigurationSectionHandler。没办法。

但是,您也可以让FooCollection实现该界面。

IsDefaultCollection属性属性也可以派上用场。

答案 1 :(得分:0)

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
}