我有一个由三个项目组成的项目,
- WCF 服务
- Asp.net MVC 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/