zoukankan      html  css  js  c++  java
  • Singleton设计模式活学活用: 请求单一 vs 线程单一

    /// <summary>
        /// 在Web Request期间只存在唯一实例的类
        /// 使用了Lazy
        /// </summary>
        public class SingletonPerRequest
        {
            public object Data;
    
            public static readonly string Key = "SingletonPerRequest.Key";
    
            public static SingletonPerRequest Current
            {
                get
                {
                    SingletonPerRequest instance = (SingletonPerRequest)HttpContext.Current.Items[Key];
                    if (instance==null)
                    {
                        instance = new SingletonPerRequest();
                        HttpContext.Current.Items[Key] = instance;
                    }
                    return instance;
                }
            }
        }
    
        /// <summary>
        /// 在一个执行线程中只存在唯一实例的类
        /// 使用了Lazy
        /// </summary>
        public class SingletonPerThread
        {
            public object Data;
    
            public static readonly string Key = "SingletonPerThread.Key";
    
            public static SingletonPerThread Current
            {
                get
                {
                    SingletonPerThread instance = (SingletonPerThread)CallContext.GetData(Key);
                    if (instance == null)
                    {
                        instance = new SingletonPerThread();
                        CallContext.SetData(Key, instance);
                    }
                    return instance;
                }
            }
        }

    这只是个示例,你可以将它改为泛型类,以编写更安全的代码.

    此外,CallContext在Web/Win中,可以移植,所以Web中也建议使用第二种方案.

  • 相关阅读:
    记第一次为开源代码报漏洞
    入职第三周——总结前两周学习内容
    入职一星期之感想
    毕业季之礼
    基于mint-ui的移动应用开发案例二(项目搭建)
    基于mint-ui的移动应用开发案例一(简介)
    工作笔记一——杂项
    微信小程序实战小小应用——豆瓣电影
    React学习之坑(二)- 基础入门
    React学习笔记(一)- 环境搭建
  • 原文地址:https://www.cnblogs.com/rockniu/p/1601020.html
Copyright © 2011-2022 走看看