可观察对象/动态接口?

时间:2014-12-08 21:51:27

标签: c# .net oop generics configuration

我目前正在寻找一种干净利落的方式来管理/存储应用程序配置。我已经看到了很多方法和框架,但我并不满意,因为大多数人都看到了一个简单的想法:

* Store 'some' data
* Retrieve 'some' data

对于简单的键值存储,它可能看起来像这样(伪):

public T Get<T>(string key);
public void Save<T>(string key, T value);

生活在System.Configuration内的.NET配置框架已经存在了一段时间,因为它允许强类型配置对象,它提供了一组基类来描述配置方案。然而,这需要大量的工作和样板代码来使事情运行。

我想到的是这样的事情:

public IConfiguration<TSet> : TSet {

    void Commit();
    void Refresh();

}

public class MyConfigurationSet {
    public string Value1 { get; set; }
    public int Value2 { get; set; }
}

// usage
var config = new JsonConfiguration<MyConfigurationSet>(MYPATH);
config.Value1 = "Hello";
config.Commit();

有没有办法让这样的事情成为可能?为了做到这一点,我需要a)从泛型类型派生而b)&#34;观察&#34;为了跟踪变化等而改变的通用类型的实例,并且我不知道这些事情是可行的方式(现在,例如对于第一部分,我可以&#t; t看到除了目前不是之外不可能的任何原因。有人有想法吗?

1 个答案:

答案 0 :(得分:0)

从泛型类型派生是没有问题的:

public class JsonConfiguration<T> : IConfiguration<T>
{
}

完全允许。

就观察而言,我会对实现INotifyPropertyChanged的类型设置泛型类型约束,以便您可以注册PropertyChanged事件。您不能只是“陷阱”随机变量赋值,客户端代码必须通知您。

public class JsonConfiguration<T> : IConfiguration<T> where T:INotifyPropertyChanged
{
}