gpt4 book ai didi

c# - 如何从数据库中的 XML 中读取配置部分?

转载 作者:IT王子 更新时间:2023-10-29 04:21:58 26 4
gpt4 key购买 nike

我有一个像这样的配置类:

public class MyConfig : ConfigurationSection
{
[ConfigurationProperty("MyProperty", IsRequired = true)]
public string MyProperty
{
get { return (string)this["MyProperty"]; }
set { this["MyProperty"] = value; }
}
}

它正在被另一个这样的类实例化

(MyConfig)ConfigurationManager.GetSection("myConfig")

我们正在进行一些更改,现在将配置文件作为 xml 存储在数据库中,就像当前在配置文件中一样。

我想将 MyConfig 维护为 ConfigurationSection 以实现向后兼容性,但仍然能够通过使用从数据库中检索到的 XML 字符串来实例化它。

这可能吗?如果是这样,如何? (请记住,它仍应像上面实例化的那样工作)

最佳答案

我通常是这样做的:只需将这些成员添加到 MyConfig 类中即可:

    public class MyConfig : ConfigurationSection
{
private static MyConfig _current;
public static MyConfig Current
{
get
{
if (_current == null)
{
switch(ConfigurationStorageType) // where do you want read config from?
{
case ConfigFile: // from .config file
_current = ConfigurationManager.GetSection("MySectionName") as MyConfig;
break;

case ConfigDb: // from database
default:
using (Stream stream = GetMyStreamFromDb())
{
using (XmlTextReader reader = new XmlTextReader(stream))
{
_current = Get(reader);
}
}
break;


}
}
return _current;
}
}

public static MyConfig Get(XmlReader reader)
{
if (reader == null)
throw new ArgumentNullException("reader");

MyConfig section = new MyConfig();
section.DeserializeSection(reader);
return section;
}
}

这样,您无需更改 MyConfig 类,但您仍然需要更改您的客户使用此类代码访问它的方式:

string myProp = MyConfig.Current.MyProperty;

关于c# - 如何从数据库中的 XML 中读取配置部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4339167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com