[英]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容器,则务必使用容器注册设置。
我为ConfigurationManager
和WebConfigurationManager
执行此ConfigurationManager
,以便我可以为测试注入设置。 Nathan Gloyn已经将适配器和接口包装在一个项目中 ,如果你也想这样做,你可以使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.