簡體   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