[英]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.