簡體   English   中英

處理應用設置值的最佳做法

[英]Best practice for handling appsettings values

我正在嘗試編寫更好的代碼,由於這個原因,我看了一下我過去寫的一些代碼,發現我可以通過以下方式訪問.config appsetting

 Public void Do()
{
 Var x = ConfigurationManager.AppSettings.Get("foo");
 doSomethingElse(x);
}

使用這種方法編寫測試時,我問自己:使用具有公開所有.config AppSettings值的屬性的接口是否更好? 這將允許我通過IoC替換實際的實現。

另一方面,我問將所有這些值包裝在類/接口中是否正確?如果我有組成應用程序的不同程序集,並且需要訪問該對象,該怎么辦? 假設它將在共享項目中有意義是否具有

 Int ModelAvalue {get{};}

在該類中定義,它將永遠不會在ModelB中使用?

配置是依賴項。 我認為您關於創建返回最合適類型的接口的想法有助於測試,並使您的代碼更易於理解。 它還使您可以靈活地更改將來存儲配置的位置。

要回答您的其他問題,按照接口隔離原則 ,最好使接口更小,更具體。 您可能具有不同的界面,其中每個界面都是一組緊密相關的設置。 例如,您將沒有一個具有數據庫連接字符串和日志文件路徑的接口。

public interface IDatabaseConfiguration
{
    string ConnectionString { get; }
}

public interface IBlogConfiguration
{
    int NumberOfPostsPerPage { get; }
}

public class AppConfiguration : IDatabaseConfiguration, IBlogConfiguration
{
    public string ConnectionString 
    {
        get { return ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString; }
    }

    public int NumberOfPostsPerPage 
    {
        get { return int.Parse(ConfigurationManager.AppSettings["PostsPerPage"]); }
    }
}

將來,如果您決定將NumberOfPostsPerPage存儲在其他位置,則可以創建IBlogConfiguration的其他具體實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM