【问题标题】:Observable objects / dynamic interfaces?可观察对象/动态接口?
【发布时间】:2015-02-06 16:17:13
【问题描述】:

我目前正在寻找一种简洁明了的方式来管理/存储应用程序配置。我见过很多方法和框架,但我并不是很满意,因为我见过的大多数都遵循一个简单的想法:

* 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)“观察”该泛型类型的实例以进行更改以跟踪更改等,我不知道这些事情的方式是可能的(目前,例如对于第一部分,我看不出有任何理由说明它不可能,除了目前不是)。有人有想法吗?

【问题讨论】:

标签: c# .net oop generics configuration


【解决方案1】:

从泛型类型派生没问题:

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

完全允许。

据观察,我会对实现INotifyPropertyChanged 的类型设置一个泛型类型约束,以便您可以注册PropertyChanged 事件。你不能仅仅“捕获”一个随机变量赋值,客户端代码必须通知你。

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

【讨论】:

    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多