繁体   English   中英

对Properties.Settings.Default使用依赖注入?

[英]Use dependency injection for Properties.Settings.Default?

您是否应该考虑在类中使用Properties.Settings.Default作为依赖项,从而注入它?

例如:

public class Foo
{
    private _settings;
    private bool _myBool;

    public Foo(Settings settings)
    {
        this._settings = settings;
        this._myBool = this._settings.MyBool;
    }
}


或者您是否会将Settings作为一种应用程序范围的全球视为良好做法?

例如:

public class Foo
{
    private bool _myBool;

    public Foo()
    {
        this._myBool = Properties.Settings.Default.MyBool;
    }
}

我会选择“以上都不是”并直接注入布尔值:

public class Foo
{
    private readonly bool _myBool;

    public Foo(bool myBool)
    {
        _myBool = myBool;
    }
}

这使Foo与任何支持检索布尔值的基础结构的知识分离。 Foo没有理由通过依赖设置对象来引入复杂性,特别是如果它包含其他不相关的值。

它们应该作为依赖项传递。 想象一下当您想要在示例#2中通过单元测试更改该组设置时的情况 - 您必须在静态属性getter中使用某种复杂的开关逻辑来容纳它。

许多IoC容器甚至可以在注入类似的类时提供单例实现来帮助您。

您可能希望将“设置”封装在类中并为其设置接口。 这样,您的设置来自哪里可以更改单元测试等内容。 如果您还使用IoC容器,则务必使用容器注册设置。

我为ConfigurationManagerWebConfigurationManager执行此ConfigurationManager ,以便我可以为测试注入设置。 Nathan Gloyn已经将适配器和接口包装在一个项目中 ,如果你也想这样做,你可以使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM