C# 在web开发bll中为每个客户端定义一个Singleton变量

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 {

我正在寻找解决我问题的设计\模式

我想在web开发环境中声明一个单例变量, 但我希望它是每个用户每个会话的单例

i、 e.MyClass.StaticVar将在每个会话中为每个客户端初始化一次 并且该客户可以全球访问

你有什么建议? web应用程序BLL层中所有可能的缓存选项\级别是什么(我知道我们只能在aspx和ascx代码隐藏中使用会话字典。对吗?

我执行以下操作:

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实例向内传递给下一个类