2010-06-04 58 views
7

好的,這是一個全新的問題,所以請原諒我。在C#/ .NET中持久存儲設置/變量

什麼是最好的方式來存儲變量,使他們堅持和可恢復?我有一個使用大約10個變量(字符串和小數)作爲設置的小應用程序。目前,我將它們全部轉換爲字符串(如果需要),將它們放入數組中並將數組序列化爲文件。

這是一個痛苦,如果我想添加一個變量。所以,我正在考慮使用散列表並對其進行序列化。再次,不知道什麼是最好的方式來做到這一點。我需要的一些要求是數據需要安全地存儲(加密),並且必須可以被其他應用程序(我有另外兩個讀取設置的小應用程序)訪問。

我知道我過分複雜的東西如此基本和簡單。這幾乎都是在每個建立的應用程序中完成的。

TIA

+0

是與應用程序的每計算機配置相關聯的數據,是它而不是每個用戶的配置的一部分,或者是它與其中有可能是不相關的情況下的無限數量的用戶產生的內容相關聯的每個用戶? – 2010-06-04 19:13:06

+0

這是每臺機器配置。 – robotshapes 2010-06-04 19:17:57

回答

4

的simpliest,有效和最靈活的方法是在需要時創建一個類,添加設置,然後序列化/反序列化。該類的源代碼可以在其他程序集中重用,並且持久性可以在任何地方。確保這個類知道如何序列化/反序列化,因爲你的安全需求。這可確保實施與課程保持一致。然後調用程序集只需要通過調用靜態/共享方法來創建對象。

這爲您提供強類型設置,版本控制,添加新設置的能力,甚至複雜的數據類型(其他類)。這個對象甚至可以作爲參數傳遞給其他對象,並且由於它支持序列化,所以它非常靈活。

參見操作方法(對象類=>二進制序列=>到存儲器=>加密=>保存到文件)http://social.msdn.microsoft.com/forums/en-US/netfxremoting/thread/68c200c2-4aa4-48dc-95be-6fe077fd10f4/

參考

+0

+1 - 我以前用過這種技術,效果很好。另外一個好處是,如果您使用單獨的文件而不是(app | web).config,應用程序將不需要回收。而且你不必處理關鍵和值。 – 2010-06-05 06:10:51

1

你爲什麼不只是把它們在App.config? (或web.config)

+0

對不起,沒有完整閱讀要求。如果我需要在各種應用程序中保留設置,我通常會使用數據庫。 – jaltiere 2010-06-04 19:13:24

+0

什麼樣的數據庫? SQLite的? – robotshapes 2010-06-04 19:17:13

+0

我想這將取決於什麼是可用的,任何數據庫會做。 SQLLite,SQL Server,Oracle,MySQL .... heck你甚至可以使用Raven – jaltiere 2010-06-04 20:36:42

3

使用應用程序/ web配置文件,並使用ConfigurationManager.AppSettings [configurationItemName]方法。 (在System.Configuration中)

+1

您也可以共享設置: http://stackoverflow.com/questions/426245/how-to-share-app-config – 2010-06-04 19:31:40

+0

您還可以使用企業庫中的配置應用程序塊將設置加載/保存到.config文件。 (包括可以XML序列化的自定義配置部分) – DaveRead 2010-06-04 19:33:24

+0

這是一個「新手」問題。考慮到這一事實,企業圖書館是矯枉過正的。 – AMissico 2010-06-04 21:00:49

0

如果我仍然使用數據庫,那麼我可能會在其中添加一個表並存儲它們,否則我認爲我會使用某種XML文件,我會退縮只需幾個設置即可爲數據庫增加額外的複雜性。
使用這兩種解決方案之一,您可以輕鬆添加更多設置(舊應用程序會忽略它們)以及指定數據類型(作爲XML中的屬性)。

0

可以存儲在系統註冊表中的值:

獲取密鑰:

// This will create the key if it does not exist. 
String keyPath = "Sofware\Foo\Bar"; // use "Software\Company\App" or similar 
RegistryKey appKey = Registry.CurrentUser.CreateSubKey(keyPath); 

保存值:

String config = "SomeConfigurationValue"; 
appKey.SetValue("ConfigString", config); 

加載值:

String config = (string)appKey.GetValue("ConfigString", "Default Value"); 
0

只是爲了確保我瞭解

要求: 1.存儲用戶特定設置您的應用程序在一個文件或數據庫中的 2.不時,您可以添加額外的屬性。

這是基於網絡?贏取表格?,wcf?

我最初的想法是在持續時包含一個版本號。

每次更新設置類時,都要創建一個從最新版本繼承的新設置類。添加您的新屬性並更新版本號。

存儲: 在一個數據庫中,有兩個字段:1-版本2-序列化設置數據。 在一個文件中,兩個條目1-版本2-序列化設置數據。

序列化時,請確保包含設置類的版本號。

反序列化時,使用Factory檢索設置類的正確版本。

要記住的一件事是,您將不得不在您的應用程序中考慮較舊的設置實例。

如果您今天添加了「背景顏色」屬性,則今天之前的任何設置文件都不能訪問它。你需要確保應用程序可以處理這種情況。

因此,如果工廠發現設置類的舊版本,它可以使用保存的數據來創建該類的最新版本並使用默認值填充新屬性。

好運,

帕特里克

0

商店的設置類,序列化這些對象獨立存儲。確保將隔離級別設置爲用戶級別,以便其他應用程序可以讀取當前用戶的設置。

http://msdn.microsoft.com/en-us/library/8dzkff1s%28VS.80%29.aspx

IsolatedStorageFile,它從IsolatedStorage派生 ,提供基本的管理 存儲組件和 應用文件。 IsolatedStorageFile類的實例表示位於文件 系統中的 單個商店。