3

注意:这与这个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 { .. }
}

科尔。现在,当我执行以下操作时......

var whatever = ConfigurationManager.GetSection("foos")抛出以下异常:-

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

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

干杯:)

4

2 回答 2

2

必须实现一个IConfigurationSectionHandler. 没办法。

但是,您也可以让您FooCollection实现该接口。

IsDefaultCollection属性也可能派上用场。

于 2010-02-24T08:28:41.037 回答
1

FooCollection不是一个部分,所以你应该让它 extend 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
}
于 2018-12-19T20:22:42.100 回答