c# - 单例数据访问层

标签 c# design-patterns singleton

在我们工作的数据访问层中,我们有这个标准实现,其中类是通过一个看起来像这样的单例公共(public)属性访问的:

public static CustomerController Instance
        {
            get 
            {
                lock(singletonLock)
                {
                    if( _instance == null )
                    {
                        _instance = new CustomerController();  
                    }
                    return _instance;
                }
            }
        }

现在,我明白了代码的作用,但我想知道为什么每次使用类时都创建类的实例而不是这样做?

最佳答案

编辑:糟糕,我没听懂“数据访问层”部分。但我也有一个这样的例子:如果你的多线程应用程序通过一个单例类汇集其所有的数据库调用,那么只有一个线程会同时访问数据库,从而避免竞争条件。

如果你在多线程应用程序中有一个日志记录机制,你用它来吐出所有异常并只写入信息(特别是对于服务,或者总是运行的应用程序,只要有事情发生就打印出状态),你会遇到文件锁定问题。我使用单例记录器类,这样只有一个线程可以访问记录器,其余线程将等到记录器可以自由地在文本文件中写入它们的行。

使用单例有很多很酷的理由,但我和你一样,直到我在多线程应用程序中遇到文件访问问题时才知道它们的用途。

关于c# - 单例数据访问层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/252304/

相关文章:

c# - Linq 包含对象的方法

C# 应用程序调用 C++ 方法,错误 : PInvoke: Cannot return variants

Java - 如何从结果集中构造java对象

c# - DI 设计模式的值对象是否有效依赖?

spring - 向 Spring 询问 Singleton Bean 的 Prototype 实例?

c# - 正则表达式替换 : Transform pattern with a custom function

c# - 使用 LINQ 获取组的平均值

c++ - 四人帮 : lexi editor c++ source

c++ - 在用户类中包含 pybind11 嵌入式模块的正确方法是什么(作为单例类的一部分)

C++私有(private)构造函数