2

我需要创建一个配置部分,它能够将键值对存储在 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;
       }
 }
4

3 回答 3

2

Phil Haack 有一篇关于创建自定义配置部分的精彩文章

于 2008-09-24T04:56:34.427 回答
2

我在 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

于 2008-09-28T06:11:28.493 回答
1

这就是您在 ASCII 文本文件中获得的全部内容 - 字符串。:-)

但是,您可以对“值”字符串进行编码以包含类型参数,例如:

<key="myParam" value="type, value" />

例如:

<key="payRate" value="money,85.79"/>

然后让您的应用进行转换...

于 2008-09-24T04:59:55.870 回答