我有一個解決方案,其中包含3個項目,每個項目都需要訪問某些設置。我正在尋找一種方法將這些設置值用於來自1個不同來源的任何項目。我無法使用.Config文件,因爲這與該特定項目相關。應用程序適用於所有項目的寬設置
我可以使用數據庫,但都被告知這是不好的做法(沒有原因)
任何想法?
我有一個解決方案,其中包含3個項目,每個項目都需要訪問某些設置。我正在尋找一種方法將這些設置值用於來自1個不同來源的任何項目。我無法使用.Config文件,因爲這與該特定項目相關。應用程序適用於所有項目的寬設置
我可以使用數據庫,但都被告知這是不好的做法(沒有原因)
任何想法?
你可以這樣做:
solution.config
在每個項目的app.config
,添加到您的<appSettings>
節點:
<appSettings file="solution.config">
....
</appSettings>
你會必須將符號鏈接放在每個共同的solution.config
中項目文件夾 - 但您可以在項目中共享一個單獨的物理文件。
的<appSettings>
節點是唯一一個允許諸如此類的「累積性」設置 - 那些從file=
指定的文件將被添加到您的應用程序設置,但任何你在你的app.config
明確指定潛在的覆蓋。
另一方面,是的,當然,你可以使用數據庫。我們在大多數項目中也這樣做,因爲我們通常可以訪問數據庫,但不能訪問客戶端服務器計算機中的文件系統。我不明白爲什麼這應該是一件壞事 - 我們在表中設置了DEV,TEST和PROD - 所以您將所有設置都放在一個地方 - 我們在需要時選擇所需的設置。工作得很好 - 當然,像數據庫的連接字符串這樣的設置不能存儲在那裏 - 但是我們的配置信息的大部分是。再說一遍:我真的不明白爲什麼這本應該是一個糟糕的選擇本身 - 所以除非你的消息來源能夠以某些事實和理由支持他/她的陳述,否則我會忽略它。
您可以在定義的configSection中定義configSource屬性,以引用從中加載屬性的外部文件。 在這裏你可以找到一個例子:
Is there any way for an App.config file to reference another full config file? (.NET)
您還可以使用DB當然,但是這可能會涉及開發某種配置控制檯的,因爲它不是管理配置一個很好的做法屬性直接進入D B。
否則,您可以創建您的配置文件(例如xml或yaml)並創建您自己的共享配置解析器。
您可以在每個指向全局項目的項目.config文件中添加一個條目。但你需要在三個地方閱讀。
想到的另一個解決方案是將您的通用設置與自己的.config文件放到它們自己的程序集中。然後,您將該程序集包含在您的每個項目中。 .config文件在程序集中讀取,您可以讀出所需的值。
什麼樣的設置?
您可以使用系統範圍的machine.config和web.config文件來設置適用於整個機器的設置。
\Windows\Microsoft.NET\Framework[64]\[version]\config\machine.config
\Windows\Microsoft.NET\Framework[64]\[version]\config\web.config
如果您有權訪問它,則可以使用註冊表。然後,你需要的是一個課程來讀出它們(並且有可能將它們放入),並且每個項目都可以使用該課程來閱讀它們。
但是,主要的缺點是您必須將設置添加到您運行解決方案的每臺機器註冊表中。
哦,男孩 - 註冊表 - 這是1990年代的.....這是真正的死技術 - 克服它。使用比註冊表更易於管理的東西..... – 2010-06-30 15:01:37
我使用Singleton模式或Global實例(無論您的首選項是否)創建一個類來保存系統範圍的設置。
如果解決方案中有其他項目,它可以看到該類(添加引用時)。
這也將存儲機制(數據庫,配置文件,自定義XML文件等)的設置表示分離出來,如果設計到接口,它也會使單元測試更加靈活。
我們在這裏說的是WinForms/desktop還是ASP.Net? – DOK 2010-06-30 14:42:48
我總是將設置存儲在數據庫中,但連接數據庫所需的設置或特定於工作站的設置除外。數據庫強大且集中,旨在存儲數據;設置是數據! – 2010-06-30 14:50:13
@Dok ASP.net ... – LiamB 2010-06-30 14:50:43