2017-04-19 24 views
0

すべてのアプリケーションセッションをグローバルクラスに格納しています。アプリケーションセッションをStaticインスタンスに正しく格納する方法は?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.SessionState; 
namespace MyApp 
{ 
    [Serializable] 
    public class AppSession : IRequiresSessionState 
    { 
     //Name that will be used as key for Session object 
     private const string SESSION_SINGLETON = "MyappSession"; 

     string _UserName; 
     int? _UserID ,_ClientID; 
     public int? UserID 
     { 
      get 
      { 
       return _UserID; 
      } 
      set 
      { 
       _UserID = value; 
      } 
     } 
     public string UserName 
     { 
      get 
      { 
       return _UserName; 
      } 
      set 
      { 
       _UserName = value; 
      } 
     } 
     public int? ClientID 
     {  
      get 
      { 
       return _ClientID; 
      } 
      set 
      { 
       _ClientID = value; 
      } 
     } 
     public MarketingSession Marketing { get; set; }  
    } 
} 

私たちは、私はそれはそれは、クラスやないセッションを維持するための正しい方法である100%を確認していない

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.SessionState; 

namespace MyApp 
{ 
    [Serializable] 
    public class MarketingSession : IRequiresSessionState 
    { 
     private int? _ChannelId;  
     public int? ChallelId { get 
     { 
      return _ChannelId; } 
      set { _ChannelId = value; } 
     }  
    } 
} 

以下のように異なるMarketingSessionクラスにそのページセッションを維持するために、別のクラスのプロパティを作成しました。 このセッションで非静的な別のクラスオブジェクトを作成しても問題ありません。

MarketingSessionクラスプロパティを追加したとき、以下のようにエラーが発生します。

エラー10オブジェクト参照が非静的フィールドのために必要とされる、 メソッド、またはプロパティMyApp.AppSession.Marketing.get

私は自分のアプリケーションセッションを管理したりしないように正しい方法をやっているなら、私を更新? 方法が正しい場合は、エラーを修正するにはどうすればいいですか?

+0

あなたMarketingSessionオブジェクトを初期化するコードを表示します。 –

+0

AppSessionクラスで初期化されません。正しい方法をしようとしていますか? AppSessionクラスのMarketingSessionプロパティで静的メンバーを使用する必要がありますか? –

+0

MyApp.AppSession.Marketing.get - このメソッドは静的であるかのように使用しています。プロパティにアクセスする前にAppSessionオブジェクトを初期化するか、まず静的に宣言する必要があります。 –

答えて

0

Singleton Patternはあなたのケースでは最善の解決策のようです。 マーケティングオブジェクトを一度だけ初期化し、その値をすべてのAppSessionクラスインスタンスで共有します。

これはまさにこのパターンが使用されているものです。 以下の例のいくつかを読んで、それを使用する方法と、それがあなたの目標に最も適した方法であることを確認してください。

https://msdn.microsoft.com/en-us/library/ff650316.aspx

http://csharpindepth.com/Articles/General/Singleton.aspx

https://www.dotnetperls.com/singleton

+0

ありがとうございました..パターンごとに初期化することにします。私たちはすでにそのパターンを使用していました。 –

+0

うれしい私は助けました。本当にあなたが探していたものであれば、あなたの質問に答えてください。 –

+0

AppSessionクラスの他のMarketingクラスまたはNormalオブジェクトの静的オブジェクトを作成する必要がありますか? 以下を参照してください。 static読み取り専用MarketingSession _ms =新しいMarketingSession(); { { 戻り_MSを取得マーケティング 公共MarketingSession。 }} または私が持っているのですか?パブリックMarketingSessionマーケティング{...} ? @AbhishekB。 –

関連する問題