Если у вас есть состояние сеанса inproc, вы можете использовать что-то вроде этого
class Singleton
{
static object locker = new Object();
public static Singleton Instance
{
get
{
var inst = HttpContext.Current.Session["InstanceKey"] as Singleton;
if (inst == null)
{
lock (locker)
{
inst = HttpContext.Current.Session["InstanceKey"] as Singleton;
if (inst == null)
{
inst = new Singleton();
HttpContext.Current.Session["InstanceKey"] = inst;
}
}
}
return inst;
}
}
}
Код может быть улучшен, чтобы избежать блокировки для всех пользователей. Не знаю, если это хорошая идея для реализации Singleton, я бы порекомендовал вам посмотреть, можете ли вы создать свой код другим способом.