c# - 应用程序设置界面

标签 c# design-patterns interface application-settings

Reed Copsey 对以下 SO 问题给出了此回复:

Which design patterns can be applied to the configuration settings problem?

I prefer to create an interface for setting query, loading, and saving. By using dependency injection, I can inject this into each component that requires it.

有人可以给出这方面的代码示例吗?例如,电子邮件客户端的设置类和 FTP 客户端的另一个设置类基于这个可以是 DI 的“接口(interface)”。我知道您可以为应用程序中的所有设置做一个全局单例(我目前正在做)但是 Reed 的这个建议很有趣并且想尝试一下。

最佳答案

对于界面,我会做这样的事情:

public interface ISettingsProvider
{
    void Load();

    T Query<T>(string key);
    void Set<T>(string key, T value);

    void Save();
}

然后我将实现该接口(interface)一次,并使用 MEF 进行依赖注入(inject)。我想我会用 LinqToXml 实现它以加载/保存到 XML,并且可能有一个字典来缓存内存中的设置。另一种方法是二进制序列化您的对象并在某处转储快照(这有缺点,例如,它不是人类可读的)。

如果您只保存字符串和/或数字,XML 是一个不错的选择。如果您只有字符串,您甚至可以放弃泛型。

关于c# - 应用程序设置界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7453501/

相关文章:

c# - 如何处理声明为列表的属性?

c# - 从不同数据格式创建对象的最佳方式

c++ - 从接口(interface)的父接口(interface)在哪里实现功能?

c++ - C++中的命令模式

addTextChangedListener(new TextWatcher()) 的 java 语法

c# - 没有 Owin 的 Asp.Net MVC 5?

c# - 自 TFS .NET 4.5 升级以来,以 .NET 4.0 为目标会产生无效的 Win XP 应用程序

go - 将配置结构加载到go后,访问嵌套属性的问题

c# - 如何清除 DataGridView 以便新数据可以填充单元格?

android - 使用接口(interface)和方法 onAttach(Fragments)