C# ASP .NET MVC 3单例构造函数调用两次

标签 c# wcf asp.net-mvc-3 singleton

我有一个由三个项目组成的项目,

  1. WCF 服务
  2. Asp.net MVC 3 应用程序
  3. 类库。

类库里的是我的单例,我是这样弄的;

public sealed class Singleton
{
    public static Singleton Instance { get; set; }

    private Singleton()
    {

    }

    public static Singleton Instance
    {
        get
        {
            if (Instance == null)
                Instance = new Singleton();
            return Instance;
        }
    }       
}

问题是,我在构造函数中放置了一个 Debug.WriteLine,它被调用了两次。
我想要做的是使用 mvc 3 应用程序和 WCF 服务中的单例,但它们创建不同的实例。为什么?

编辑:我之前尝试过一个 treadsafe 单例。没有区别。

最佳答案

这里可能会发生一些事情。

最有可能的是您的 MVC 应用程序和 WCF 服务在不同的 AppDomain 中运行。如果是这种情况,代码将不可能“共享”同一个实例。

另一个不太可能的原因是,因为您的代码不是线程安全的,所以创建了多个实例。如果 Singleton 构造函数需要很长时间才能返回,那么这可能就是问题所在。由于您使用的是 MVC3,我将假定为 .Net 4,在这种情况下 Lazy class是你的 friend :

private static readonly Lazy<Singleton> _singleton = new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance { get { return _singleton.Value; } }

关于C# ASP .NET MVC 3单例构造函数调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9292251/

相关文章:

c# - 是否可以在 DebuggerDisplay 中使用条件?

c# - 为什么WPF文本框不支持三击全选文本

c# - c# 中的数字猜谜游戏

c# - EF 4.3 抛出 "An error occurred while getting provider info from the dB. caused by EF using an incorrect con. string. Check Inner Excptin."

asp.net-mvc-3 - MVC3中TextBoxFor中的控件名称

asp.net-mvc-3 - 发布表单时 Controller 中的模型绑定(bind) - 导航属性不会自动加载

asp.net-mvc - 子文件夹中的 Controller

c# - 如何在多任务环境中防止在azure表中重复插入?

c# - 尝试使用 XHR 联系 WCF 服务时出现 400 错误请求

wcf - WCF 服务、WCF RIA 服务和 WCF 数据服务之间的区别