2013-04-21 81 views
3

我正在開發將由Windows Store和WP8應用程序使用的PCL。這個庫需要一些配置,例如遠程服務網址。我想把它們放到app.config中並使用ConfigurationManager檢索它們,但System.Configuration在PCL中似乎不可用。便攜式類庫中的配置值

+1

正常的庫訪問'ConfigurationManager'看起來有點可疑。這不應該是應用程序的責任,然後應用程序將配置對象傳遞給庫? – CodesInChaos 2013-04-21 12:23:34

回答

2

我會創建一個配置類。在最簡單的情況下它可能看起來像:

public class MyLibraryConfig 
{ 
    public string RemoteServiceUrl{get;set;} 
} 

然後通過這個類的一個實例,通過標準的依賴注入技術庫。例如,將它傳遞給構造函數並將其存儲在一個字段中。然後,應用程序有責任從文件中讀取配置ConfigurationManager等。

IMO這是更好的設計,我會用它來查詢配置管理器,即使在我可以訪問ConfigurationManager的庫中。否則,您會強制應用程序使用單個配置並使用特定的配置機制。


你也可以使用一個接口或一個不可變類。這稍微複雜一些,但IMO更好的設計。

+0

你能證明爲什麼在庫類中使用應用程序設置是件壞事嗎?這種配置機制是不是被設計用於這種方式? – filip 2013-04-21 12:55:55

+0

決定使用哪種配置是應用程序的責任,而不是庫的責任。在應用程序的啓動代碼中訪問'ConfigurationManager'沒有問題,但是在庫中訪問它不是。避免訪問庫中的'ConfigurationManager'是避免單例和全局變量的特例。如果你想在一個單獨的過程中使用兩個實例庫?你如何提供測試配置?如果圖書館的使用者使用不同的配置機制呢? – CodesInChaos 2013-04-21 12:59:59

+0

AppSettings顧名思義就是應用程序特定設置的集合。庫代表可以被不同應用程序重用的代碼,這些應用程序可能有不同的分組方式。當然,如果您正在使用可移植類庫,則應該比使用AppSettings更加普遍地訪問配置信息。 – 2013-04-24 12:39:43