2009-08-23 55 views
2

我對.Net相當陌生...我有幾個查詢將在應用程序加載時執行。我希望這些查詢將數據存儲在整個應用程序可訪問的對象(數據集?)中。我應該使用單身課程嗎?我的應用程序中的用戶控件如何在主應用程序代碼中引用公共變量?.Net應用程序範圍內的變量

我想我還沒有找到如何/在哪裏存儲應用程序變量以及如何引用它們,當我需要填充一個ListBox,DataGridView的一個很好的資源,等等

作爲背景,我最熟悉使用Flex Builder 3進行開發,對於模糊的問題感到抱歉......我在找到關於該主題的良好參考時遇到問題(不僅僅是填充Control,而是將數據存儲在應用程序級別並從任何地方引用它該應用程序)。

編輯:這是編程使用C#

+0

您試圖存儲和訪問多少數據?這些數據多久改變一次?我假設這是一個桌面應用程序,對嗎? – 2009-08-23 20:40:06

+0

是一個桌面應用程序。它不會在初始加載後都經常變化,我不希望有多次查詢數據 – 2009-08-23 20:44:40

回答

2

聽起來你正在使用ASP.NET Windows窗體應用程序,在這種情況下Application State(MSDN)將允許你存儲和檢索應用程序範圍內的數據,可以可以從應用程序的任何地方訪問。

這裏更多:

How to: Save Values in Application State

How to: Read Values from Application State

如果你正在寫一個桌面應用程序,你應該創建一個包含您的應用程序範圍內的數據靜態類,如:

public static class ApplicationSettings 
{ 
    public static string InstallDirectory { get { ... } set { ... } }; 
    public static DataSet SomeDataSet { get { ... } set { ... } }; 


    static ApplicationSettings() 
    { 
     // ... initialize or load settings here 
    } 
} 

這裏不需要單例,但是如果你確實需要懶惰的初始化和線程安排,你可能想要那條路線。

+2

對不起,不澄清...這是一個Windows窗體應用程序 – 2009-08-23 20:43:51

+0

這不會是線程安全的。 – 2017-12-05 14:53:52

1

您可以將信息存儲在App.config文件中,並使用AppSettingsReader類來訪問數據。

編輯:看到你不想多次查詢信息,你可以使用單例訪問和緩存數據。

0

只要應用程序的主窗體打開,就可能需要您的對象。如果是這樣,只需將它們存儲爲表單的屬性即可。

+0

這是一個很好的解決方案,除非該數據被拯救實例 – 2009-08-23 21:00:20

+0

我將如何引用它從子控制之間?應用。*? – 2009-08-23 21:05:19

+0

所以他們試圖訪問父窗體的自定義成員,我寧願不代碼我的控制。我認爲這將是更好地所需的參照/價值觀明確地傳遞給控制。 – 2009-08-25 09:52:52

0

單身是不好的,可以嗎? ;)

或者更重要的是,全局數據(特別是可變全局數據)通常不是一件好事。它使課程難以測試和調試。小範圍是很好的範圍。

一種選擇是查看IoC容器庫(又名DI框架)。

控制 DI =依賴注入(或反轉)的國際奧委會=反轉

基本上你可以設置你的類,需要訪問全局數據,並添加你的「單身」類型的參數的構造函數 - 除了它不是一個單獨的,只是一個普通的舊對象(或接口)。然後,您告訴Container您的「全局數據」類具有較長的使用期限,並使用容器來創建其他對象。您將不再使用「新」關鍵字。好處是容器會自動將所有東西連接起來,創建一個且只有一個全局類的實例,並將其注入所有其他構造對象。

下面是.NET庫/框架的(不完全)列表:

IoC Container Benchmark

Ninject的另一個。我用的團結,但是,這並不意味着它是最適合你的。 這是另一個列表: http://elegantcode.com/2009/01/07/ioc-libraries-compared/