jos*_*rry 7 .net c# configuration
有没有办法建立一个允许自由格式XML体的配置部分?我如何在代码中获得自由形式的主体?
例如,我想像这样创建一个ModuleConfigurationSection:
<modules>
<module name="ModuleA" type="My.Namespace.ModuleA, My.Assembly">
<moduleConfig>
<serviceAddress>http://myserver/myservice.svc</serviceAddress>
</moduleConfig>
</module>
<module name="ModuleB" type="My.Namespace.ModuleB, My.OtherAssembly">
<moduleConfig>
<filePath>c:\directory</filePath>
</moduleConfig>
</module>
</modules>
Run Code Online (Sandbox Code Playgroud)
因此,一些代码会使用配置部分来启动每个模块类型,ConfigurationManager.GetSection("modules")并且我希望将moduleConfig元素内的XML 作为不透明配置值传递给模块类的构造函数.
任何输入赞赏!
jos*_*rry 10
这就是我最终完成此任务的方式:
public class ModuleElement : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get { return (string)base["name"]; }
set { base["name"] = value; }
}
XElement _config;
public XElement Config
{
get { return _config; }
}
protected override bool OnDeserializeUnrecognizedElement(string elementName, System.Xml.XmlReader reader)
{
if (elementName == "config")
{
_config = (XElement)XElement.ReadFrom(reader);
return true;
}
else
return base.OnDeserializeUnrecognizedElement(elementName, reader);
}
}
Run Code Online (Sandbox Code Playgroud)
所以xml看起来像:
<module name="ModuleA">
<config>
<filePath>C:\files\file.foo</filePath>
</config>
</module>
Run Code Online (Sandbox Code Playgroud)
config元素的主体可以是您喜欢的任何自由形式的xml.假设您设置了一个集合,那么当您这样做时,ConfigurationManager.GetSection("modules")您可以将Config每个ModuleElement对象的属性作为表示config元素节点的XML的XElement 来访问.