2012-01-04 12 views
0

私は.NETプログラミングの初心者です。私は既に嫌なサンプルでセッションを実装しようとしています。それでは、今まで私が行っていたサンプルの詳細です。私のプロジェクトでセッションを使用する

私のプロジェクトにはさまざまな解決策があります。クラスライブラリ、Webアプリケーション、およびコンソールアプリケーション。

get/propertiesの束を持つ静的クラスを作成し、これらのプロパティをクラスライブラリで使用するグローバル変数として使用しました。これらのget/setプロパティには、リストや辞書などのデータ構造が混在しています。

私のWebアプリケーションには、リストボックスとボタンの束が1ページしかありません。私はいくつかのデータの格納と検索目的のために私のクラスライブラリから私のWebアプリケーションにすべての取得プロパティを使用しています。 Webページが2つの異なるブラウザで開かれると、すべての静的変数を使用し、その静的変数にデータを格納しているので、データはあるユーザーから別のユーザーに書き込まれます。

私の最高の解決策はセッションを使用していますが、私は自分のプロジェクトでこれらを使用するのはちょっと混乱しています。この点に関して、誰かが私を助けてくれますか?

クラス・ライブラリでXMLDATAクラスは、これらの取得/設定のプロパティの束を持っています

は、ここに私の説明の小さなサンプルです。

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

は今どのように私は私のサイトを利用するすべてのユーザーがデータの彼らのセットを持っているように、セッションにこれらの静的プロパティを移動するために、私のクラスライブラリで使用するHttpContextセッションを使用してください。 FYI。 Webプロジェクトは、基本的にクラスライブラリへのメソッドの呼び出しに使用され、テストの入力の一種であるUIのリストボックスを少し選択します。

ありがとうございました。

答えて

1

簡単な方法は、あなたが、これはそれで利用できるSessionを持って

HttpContext.Current 

を使用して、クラスライブラリ内のクラスで現在のコンテキストにアクセスできることです。

あり、アプリケーションが構築される可能性があり、より複雑な方法がありますが、我々は詳述すると、最も単純な:)

から始めましょう、あなたのクラスライブラリは、セッション

にアクセスすることが可能であるコンポーネントのためのインタフェースを宣言してもよいです
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を使用してください。

私はあなたの代わりにWebフォームまたはで作業している場合は、MVC frameworkを見てみMVP patternを見てお勧めします。

+0

私の説明をもっとはっきりさせるべきです。私はセッションにXMLDataクラス全体を使用したい。そのプロパティではなく、個々のプロパティを個別に使用して、データを保存して検索します。 – sri

+0

@sriこれはそれを明確にしません。セッションに保存したいクラスがあることを意味しますか?どのような種類のセッションストア(InProc、StateServer、SQLServer)を使用していますか? –

+0

はい、InProcです。メモリに保存したいだけです。 – sri

0

上記のRuss Camのコメントに加えて、クラスライブラリのメソッドでHttpContext.Current!= nullもチェックする必要があります。単体テストやASP.Net内で実行されていないコードの記述が始まったら、お尻をかぶってしまうことがあります。

+0

よろしくお願いします。小切手を追加します –

関連する問題