您是否应该考虑在类中使用Properties.Settings.Default
作为依赖项,并因此将其注入?
e.g:
public class Foo
{
private _settings;
private bool _myBool;
public Foo(Settings settings)
{
this._settings = settings;
this._myBool = this._settings.MyBool;
}
}
。
。
或者您是否会考虑将Settings
用作全球应用程序作为良好做法?
e.g:
public class Foo
{
private bool _myBool;
public Foo()
{
this._myBool = Properties.Settings.Default.MyBool;
}
}
答案 0 :(得分:4)
我会选择“以上都不是”并直接注入布尔值:
public class Foo
{
private readonly bool _myBool;
public Foo(bool myBool)
{
_myBool = myBool;
}
}
这使Foo
与任何支持检索布尔值的基础结构的知识分离。 Foo
没有理由通过依赖设置对象来引入复杂性,特别是如果它包含其他不相关的值。
答案 1 :(得分:2)
它们应该作为依赖项传递。想象一下当您想要在示例#2中通过单元测试更改该组设置时的情况 - 您必须在静态属性getter中使用某种复杂的开关逻辑来容纳它。
许多IoC容器甚至可以在注入类似的类时提供单例实现来帮助您。
答案 2 :(得分:2)
您可能希望将“设置”封装在类中并为其设置接口。这样,您的设置来自哪里可以更改单元测试等内容。如果您还使用IoC容器,则务必使用容器注册设置。
我为ConfigurationManager
和WebConfigurationManager
执行此操作,以便我可以为测试注入设置。 Nathan Gloyn has wrapped the adapters and interface up already in a project如果你也想这样做,你可以使用。{/ p>