c# - 可观察对象/动态接口(interface)?

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

最佳答案

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

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

完全允许。

就观察而言,我会在实现 INotifyPropertyChanged 的类型上放置一个通用类型约束,以便您可以注册 PropertyChanged 事件。您不能只是“捕获”一个随机变量赋值,客户端代码必须通知您。

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

关于c# - 可观察对象/动态接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367652/

相关文章:

c# - 将文件写入 Common Application Data 文件夹被拒绝

python - python中对象没有属性错误

c# - 如何使用 openpop.net 下载多个附件

c# - 为什么 "YYYY-MM-DD HH' :'MM' :'SS"日期时间格式显示不正确?

.net - 创建 .NET Windows 服务安装程序的最佳方法是什么?

c# - 哪个事件捕获对 RichTextBox 的每次编辑?

java - 我不明白我们如何在方法compareTo中使用方法compareTo

java - Java中命名对象的最佳实践

十进制的 C# 类型后缀

c# - 如何决定是使用 LINQ to SQL 还是 ADO.NET