我有一个使用以下 ServiceBehavior 属性定义的 WCF 服务端点。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
我的服务中有一个调用问题,需要保证一个对象只创建一次。以下代码在我的服务中调用。
public class MySingletonDataProvider{
private static MySingletonDataProvider _instance;
private static readonly object _lock = new object();
public static MySingletonProvider Create(){
lock(_lock){
if(_instance == null){
_instance = new MySingletonProvider();
Log.Info("New Instance Created " + AppDomain.CurrentDomain.FriendlyName");
}
return _instance;
}
}
}
遇到这种情况时,我们通常会收到 3-5 条日志,如下所示:
- "New Instance Created 123252352323623"
- "New Instance Created 423523562362362"
- "New Instance Created 235623623462366"
显示多个 AppDomain 能够执行锁内的代码。这造成了巨大的问题。有什么解决方案可以保证这个实例只创建一次?