C# 创建连接文件的最佳实践

C# 创建连接文件的最佳实践,c#,.net,configuration,configuration-files,config,C#,.net,Configuration,Configuration Files,Config,我有一个应用程序,其中有一些缓存、队列和数据库的配置文件 public class ServerConfiguration: ConfigurationSection { [ ConfigurationProperty( FOO, DefaultValue = "", IsRequired = false ) ] public string FOO { get { return (string)this[FOO]; } set { this

我有一个应用程序,其中有一些缓存、队列和数据库的配置文件

public class ServerConfiguration: ConfigurationSection
{
    [ ConfigurationProperty( FOO, DefaultValue = "", IsRequired = false ) ]
    public string FOO
    {
        get { return (string)this[FOO]; }
        set { this[FOO] = value; }
    }
}
这就是我对配置文件所做的,我还有一些继承层次结构


您使用什么来处理配置?为此,有哪些最佳做法?

我喜欢并广泛使用Microsoft配置库,但我会尽力确保我的应用程序不依赖它。这通常涉及让我的配置部分实现一个接口,因此您的示例如下所示:

public class ServerConfiguration : ConfigurationSection, IServerConfiguration
{
    [ ConfigurationProperty( FOO, DefaultValue = "", IsRequired = false ) ]
    public string FOO
    {
        get { return (string)this[FOO]; }
        set { this[FOO] = value; }
    }
}

public interface IServerConfiguration
{
    public string FOO { get; } //Unless I am updating the config in code I don't use set on the interface
}
现在,无论您在代码中使用什么配置,您都只需要担心IServerConfiguration,您可以更改实现,而无需更改用法。有时我只是在开发过程中从硬编码类开始,当我在不同的环境中需要不同的值时,才将其更改为配置部分

如果您使用的是配置部分,则还需要依赖ConfigurationManager。我通过使用IConfigurationProvider[T]将其隐藏在代码中,其中T将是IServerConfiguration,您可以在我的博客上的“配置无知”下看到这方面的示例


我觉得很不错。我认为它应该是静态的和单例的,但在其他方面没有太多的改进。@糟糕的单例使单元测试变得更加困难,界面用户和IoC提供了更大的灵活性