NopCommerce中的单例

项目中经常会遇到单例的情况。大部分的单例代码都差不多像这样定义:

internal class SingletonOne
    {
        private static SingletonOne _singleton;

        private SingletonOne()
        {
        }

        public static SingletonOne Instance
        {
            get
            {
                if (_singleton == null)
                {
                    var instance = new SingletonOne();
                    Interlocked.CompareExchange(ref _singleton, instance, null);
                }

                return _singleton;
            }
        }
    }

但是很明显的一个缺点是这个类只能用作单例。

最近看了NopCommerce对单例有个包装。觉得有点新颖 给大家分享一下。

///
    /// Provides access to all "singletons" stored by .
    ///
    public class Singleton
    {
        static Singleton()
        {
            allSingletons = new Dictionaryobject>();
        }

        static readonly IDictionaryobject> allSingletons;

        /// Dictionary of type to singleton instances.

        public static IDictionaryobject> AllSingletons
        {
            get { return allSingletons; }
        }
    }
public class Singleton : Singleton
    {
        static T instance;

        /// The singleton instance for the specified type T. Only one instance (at the time) of this object for each type of T.

        public static T Instance
        {
            get { return instance; }
            set
            {
                instance = value;
                AllSingletons[typeof(T)] = value;
            }
        }
    }

比如定义了一个类, 那么可以这样使用

public class Fake
{
}

Singleton.Instance = new Fake();

Original: https://www.cnblogs.com/VectorZhang/p/5366812.html
Author: 禅宗花园…迷失的佛
Title: NopCommerce中的单例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572584/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • druid数据源手动创建

    手动创建druid数据源,可以使用jdbc或者通过aspect进行多数据源的动态切换 通过md5加密创建唯一key,在key重复时不进行创建, 创建的数据源可以通过dataSour…

    Java 2023年6月16日
    059
  • 彻底掌握Makefile(二)

    彻底掌握Makefile(二) 前言 在前面的文章彻底掌握Makefile(一)当中,我们简要的介绍了一些常见的makefile使用方法,在本篇文章当中我们将继续介绍一些makef…

    Java 2023年6月8日
    0118
  • TCP 5连问,你能抗到第几轮?

    1,TCP3次握手具体过程 2,请聊聊SYN攻击 3,CLOSE-WAIT 和 TIME-WAIT的作用 4,TCP如何保证可靠性 5,TCP如何进行拥塞控制 答案解析 ​ TCP…

    Java 2023年6月15日
    089
  • 你的博客被搜索引擎收录了吗?

    持续原创输出,点击上方蓝字关注我 前言 如何判断自己的博客被百度收录了? 如何操作? 准备一个百度站长账号 验证网站所有权 HTML验证 生成站点地图 如何自动推送? 总结 大部分…

    Java 2023年6月14日
    077
  • 分布式搜索引擎–01

    1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 1.1.0.ELK技术…

    Java 2023年6月9日
    069
  • 干了3年程序员,我开窍了

    “当时每酣醉,不觉行路难”。 每每有人问我: 程序员工作三年,要大致学习到什么程度才算合格? 这时候,我感觉很难给出一个绝对正确的回答。 我能做的就是,如实…

    Java 2023年6月7日
    087
  • xen 虚拟机挂了,宿主机假死的问题追终,全思路

    出问题主机工作环境用的是xenserver6.5集群,有一天上去突然发现一台vm连不上了,想着那就上去xenserver重启虚拟机,结果强制重启不能成功,就上去宿主机查询磁盘空间 …

    Java 2023年5月30日
    096
  • 注解和反射

    1、什么是注解 1、Annotation的作用 不是程序本身可以对程序做出解释 可以被其他程序读取 2、格式 @注释名,还可以添加一些参数 3、使用 package、class、m…

    Java 2023年6月14日
    079
  • 设计模式 — FactoryMethod(工厂方法)

    工厂方法(Factory Method) 定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method 使得一个类的实例化延迟(目的:解耦)到子类。 在软件系统…

    Java 2023年6月16日
    090
  • Java 初识递归

    Java 递归 什么是递归 递归: 即在成员方法内调用自身 递归的优点 能用简洁的代码解决复杂的问题 递归的缺点 对内存的消耗大 递归的应用场景 当我们要获取一个结果,但是这个结果…

    Java 2023年6月5日
    097
  • 【Java面试手册-算法篇】给定一个整型数组,请判断是否为回文数组?

    对于一个给定的由正整数组成的数组 A[] ,如果将 A 倒序后数字的排列与 A 完全相同,则成数组A为回文数组。比如 [1, 2, 3, 2, 1] 是回文数组,而 [1, 2, …

    Java 2023年6月8日
    0107
  • 引入 Gateway 网关,这些坑一定要学会避开!!!

    Spring cloud gateway是替代zuul的网关产品,基于Spring 5、Spring boot 2.0以上、Reactor, 提供任意的路由匹配和断言、过滤功能。上…

    Java 2023年5月29日
    087
  • Java学习 (12)Java流程控制篇(03)循环结构

    While 循环 *while 是最基本的循环结构,结构为 public static void main(String[] args) { while (布尔表达式){ //循环…

    Java 2023年6月8日
    086
  • 8086汇编语言实现简易计算器

    8086汇编语言实现简易计算器 本周看了一个很有意思的知识。 C语言的编译器最初是怎么来的? 最初应该是由汇编语言实现一个简化版C语言,然后使用简化版的C语言进行多次迭代,功能更新…

    Java 2023年6月7日
    086
  • 三大WEB服务器对比分析(apache ,lighttpd,nginx)

    原文地址:http://www.bbtang.info/linux/web/821.html lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特…

    Java 2023年5月30日
    070
  • Spring 源码(4)在Spring配置文件中自定义标签如何实现?

    基于 Spring源码在处理定制的标签时是通过定制的命名空间处理器和 xsd文件进行解析的,在 spring的 classpath下的 META-INF/spring.schema…

    Java 2023年6月14日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球