C# 在web开发bll中为每个客户端定义一个Singleton变量
我正在寻找解决我问题的设计\模式 我想在web开发环境中声明一个单例变量, 但我希望它是每个用户每个会话的单例 i、 e.MyClass.StaticVar将在每个会话中为每个客户端初始化一次 并且该客户可以全球访问 你有什么建议? web应用程序BLL层中所有可能的缓存选项\级别是什么(我知道我们只能在aspx和ascx代码隐藏中使用会话字典。对吗?我执行以下操作:C# 在web开发bll中为每个客户端定义一个Singleton变量,c#,asp.net,caching,C#,Asp.net,Caching,我正在寻找解决我问题的设计\模式 我想在web开发环境中声明一个单例变量, 但我希望它是每个用户每个会话的单例 i、 e.MyClass.StaticVar将在每个会话中为每个客户端初始化一次 并且该客户可以全球访问 你有什么建议? web应用程序BLL层中所有可能的缓存选项\级别是什么(我知道我们只能在aspx和ascx代码隐藏中使用会话字典。对吗?我执行以下操作: public class MyClass { public static MyClass StaticVar {
public class MyClass
{
public static MyClass StaticVar
{
get
{
var s = HttpContext.Current.Session["MyClass"] as MyClass;
if ( s==null )
{
s = new MyClass();
HttpContext.Current.Session["MyClass"] = s;
}
return s;
}
}
}
您可以在上面的示例中添加锁定(lock
语句),使其成为线程安全的
public class MyClass
{
public static MyClass StaticVar
{
get
{
var s = HttpContext.Current.Session["MyClass"] as MyClass;
if ( s==null )
{
s = new MyClass();
HttpContext.Current.Session["MyClass"] = s;
}
return s;
}
}
}
您可以在上面的示例中添加锁定(
lock
语句),以使其线程安全。会话在任何层都可用吗?不仅仅是aspx和ascx代码隐藏?当从CodeBehindSession调用构造函数在任何层都可用时,您需要将singleton实例向内传递到下一个类?不仅仅是aspx和ASCXCodeBehind?当从CodeBehind调用构造函数时,需要将singleton实例向内传递给下一个类