2012-01-04 41 views
0

我是.NET編程新手,我試圖在我已經擰緊的示例中實現會話。所以這裏是我迄今爲止所做的樣本的細節。在我的項目中使用會話

我在我的項目中有類型的解決方案。類庫,Web應用程序和控制檯應用程序。

我創建了一個靜態類,它有一堆get /屬性,並將這些屬性用作我的類庫中使用的全局變量。這些get/set屬性具有一組混合的數據結構,如列表和字典。

我的Web應用程序只有一個頁面,有一堆列表框和按鈕。我將我的類庫中的所有get屬性用於我的Web應用程序中,以用於某些數據存儲和檢索目的。現在,當網頁在兩個不同的瀏覽器中打開時,數據會從一個用戶寫到另一個用戶,因爲我正在使用所有靜態變量並將數據存儲在這些靜態變量中。

我最好的解決方案是使用會話,但我有點困惑在我的項目中使用它們。在這方面任何人都可以幫助我。

這裏是我的解釋小樣本:

一個XMLDATA類的類庫有一堆這些獲取/設置屬性。

public Dictionary<string, List<string>> Content 
{ 
    get { return _testContent; } 
    set { _testContent = value;} 
} 

現在我該怎樣使用HttpContext會議在我的類庫使用這些靜態屬性轉移到會議讓誰使用我的網站的每個用戶都有自己的一組數據。僅供參考。 Web項目基本上用於調用類庫的方法,並在UI的列表框中做一些選擇,這些都是我測試的輸入。

在此先感謝。

回答

1

最簡單的方法是,你可以使用

HttpContext.Current 

這有Session它可訪問當前上下文中的一類在你的類庫。

有更復雜的方式,你的應用程序可以被構建,但我們會用最簡單的:)

爲了闡述開始,您的類庫可以宣告接口,能夠訪問會話

組件
public interface ISessionStore 
{ 
    object Get(string key); 
    void Save(string key, object value); 
} 

現在,定義一個具體實現ISessionStore

public class HttpContextSessionStore : ISessionStore 
{ 
    public object Get(string key) 
    { 
     var context = HttpContext.Current; 

     if (context == null) 
      throw new InvalidOperationException("this class is intended to work only within web applications"); 

     return context.Session(key); 
    } 

    public void Save(string key, object value) 
    { 
     var context = HttpContext.Current; 

     if (context == null) 
      throw new InvalidOperationException("this class is intended to work only within web applications"); 

     // note that this will overwrite anything already set 
     // against this key in session 
     context.Session[key] = value; 
    } 
} 

現在你可以對間方案面對ISessionStore並在您的應用程序中使用HttpContextSessionStore

我建議你看MVP pattern,如果你與網頁表單的工作或替代,看看在MVC framework

+0

我應該讓我的解釋更加清晰。我想在整個會話中使用整個XMLData類。只是沒有財產,並利用每個財產個別保存和檢索數據 – sri 2012-01-04 21:57:34

+0

@sri,並沒有使它更清晰。你的意思是你有一個你想在會話中存儲的課程?你使用什麼類型的會話存儲(InProc,StateServer,SQLServer)? – 2012-01-04 22:04:48

+0

是的,它是一個InProc。只是想將它們存儲在內存中。 – sri 2012-01-04 22:14:22

0

除了上面的Russ Cam的註釋之外,您還應該檢查類庫中方法中的HttpContext.Current!= null。如果你開始編寫單元測試,或者在ASP中沒有執行任何代碼,它肯定會讓你陷入尷尬的境地.Net

+0

不錯的通話。我會添加檢查 – 2012-01-04 22:01:29