注意:这与此SO question非常相似,但我需要更多帮助。
我正在尝试在我的.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包装在父节中。
干杯:)
答案 0 :(得分:2)
答案 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
}