需要创建一个动态的ConfigurationSection,其中也包含该类型
时间:2020-03-06 14:38:36 来源:igfitidea点击:
我需要创建一个配置节,该节能够将键值对存储在app.config文件中,并且键值对可以在运行时添加,无论它们的类型如何。值保持其原始类型也很重要。我需要扩展以下界面
public interface IPreferencesBackend { bool TryGet<T>(string key, out T value); bool TrySet<T>(string key, T value); }
在运行时,我可以这样说:
My.Foo.Data data = new My.Foo.Data("blabla"); Pref pref = new Preferences(); pref.TrySet("foo.data", data); pref.Save(); My.Foo.Data date = new My.Foo.Data(); pref.TryGet("foo.data", out data);
我尝试使用System.Configuration.Configuration.AppSettings,但存在将键值对存储在字符串数组中的问题。
我需要的是实现System.Configuration.ConfigurationSection,在这里我可以控制各个设置的序列化方式。我注意到Visual Studio生成的设置可以做到这一点。它使用反射来创建所有设置键。我需要的是动态运行此运行时。
[System.Configuration.UserScopedSettingAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.Configuration.DefaultSettingValueAttribute("2008-09-24")] public global::System.DateTime DateTime { get { return ((global::System.DateTime)(this["DateTime"])); } set { this["DateTime"] = value; } }
解决方案
Phil Haack撰写了一篇很棒的文章,关于创建自定义配置部分
这就是我们在ASCII文本文件字符串中获得的全部内容。 :-)
但是,我们可以对"值"字符串进行编码,以包括类似以下内容的类型参数:
<key="myParam" value="type, value" />
例如:
<key="payRate" value="money,85.79"/>
然后让应用执行转换...
我在codeproject.com上找到了两篇很棒的文章,对这些问题进行了详细的解释。
揭开.NET 2.0配置之谜
http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx
用户设置已应用
http://www.codeproject.com/KB/dotnet/user_settings.aspx?display=PrintAll&fid=1286606&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2647446&fr=26