シングルトンクラスでいくつかのデータを保存したい。私が研究した限り、シングルトンクラスは一度だけインスタンス化することができます。しかし、それは私のためには機能しません。誰かが私のコードを修正することができます:C#で完璧なシングルトンクラスを作成するには?
public class MvcApplication : System.Web.HttpApplication
{
Singleton clientsessionidinstance = Singleton.GetInstance();
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "MVCPrj.Controllers" }
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
LOGICcLASSES.Logic.Auth ca = new LOGICcLASSES.Logic.Auth();
clientsessionidinstance = Singleton.GetInstance();
clientsessionidinstance.ClientSessionID = ca.Login(new LOGICcLASSES.Entities.ClientAuthentication()
{
IP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"],
UserName = ConfigurationManager.AppSettings["ClientUserName"],
Password = ConfigurationManager.AppSettings["ClientPassword"]
});
}
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
if (System.Web.HttpContext.Current.Session != null)
{
if (!string.IsNullOrEmpty(clientsessionidinstance.ClientSessionID))
{
CurrentUserSession.Store<string>("ClientSessionID", clientsessionidinstance.ClientSessionID);
}
}
}
}
ので、目標はApplication_Start
@私は、アカウントにログインして、これです。その後、戻り文字列をHttpContext.Current.Session
に保存する必要があります。
Application_Start
の中のHttpContext.Current.Session
にアクセスすることはできませんが、Application_AcquireRequestState
で可能です。
返された文字列を保持し、その値をApplication_AcquireRequestState
の内部で使用する変数を使用できますが、大きな問題はページが読み込まれることですか? 2回目ですので、変数を使用すると、2回目のロードでnull
になりますが、Application_Start
はまだ1回だけ開始されます。
私はSingletonクラスを使いましたが、まだ2番目の負荷でnull値を取得しています。
シングルトンクラス:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVCPrj.Areas.WebPage.Logic
{
public class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton GetInstance()
{
lock (typeof(Singleton))
{
instance = new Singleton();
}
return instance;
}
private string _ClientSessionID;
public string ClientSessionID
{
get { return _ClientSessionID; }
set { _ClientSessionID = value; }
}
}
}
EDITこのコードは、私の作品
public class Singleton
{
private static readonly object _mutex = new object();
private static volatile Singleton _instance = null;
private Singleton() { }
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (_mutex)
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
}
private string _ClientSessionID;
public string ClientSessionID
{
get { return _ClientSessionID; }
set { _ClientSessionID = value; }
}
}
は車輪の再発明をしないでください:http://csharpindepth.com/Articles/General/Singleton.aspx – BrokenGlass
パーフェクトシングルトンが矛盾した表現です。ファクトリを作成します。自分の生涯を理解しようとする授業を作ってはいけません。 –