我有一個單例類,其中放置了一個對象列表。所以我有一個課程將項目設置爲該列表。然後,我有另一個類獲取該單例類的對象列表。我的問題是,當我收到nservicebus消息並從單例類獲取列表時,有時候列表不包含任何對象。有時存在這些物體。所以,我所做的每次都得到單例實例,我執行'GetHashCode'並確認有2個不同的Singleton類實例。我用我的代碼錯誤地執行了什麼?WebApplication有2個單例類的實例
public class SingletonClass
{
private static readonly object _lockObj = new object();
private static readonly object _lockObjList = new object();
static SingletonClass _singletonClass;
private static List<object> _objList;
private SingletonClass()
{
}
public static SingletonClass Instance
{
get
{
lock(_lockObj)
{
if (null == _singletonClass)
{
_singletonClass= new SingletonClass();
_objList = new List<object>();
}
return _singletonClass;
}
}
}
public List<obj> GetList()
{
lock(_lockObjList)
{
return _objList;
}
}
public void UpdateProgress(int index, double value)
{
lock(_lockObjList)
{
_objList[index].Progress = value;
}
}
public void SetList(List<obj> objs)
{
lock(_lockObjList)
{
_objList = objs;
}
}
}
public class MessageHandler : HubInvoker<MessageHub>
{
public MessageHandler() {}
public void OnReceiveMessage(object sender, MessageArgs args)
{
var list = SingletonClass.Instance.GetList();
if(list != null){
var i = 0;
for(; i < list.Length && list[i].Id == args.Id; i++);
if(i < list.Length)
{
SingletonClass.Instance.UpdateProgress(i, args.Progress);
}
}
}
}
public class ObjController
{
public ObjController() {}
public void SetList(List<obj> objs)
{
SingletonClass.Instance.SetList(objs);
}
}
EDITED
我添加了上述的一些代碼對我實施的更多信息。
我可能會只是'懶惰的'方法。不要讓這個類成爲一個單獨的類,只是將它的值存儲在'Static Lazy '字段中 –
爲什麼你需要這個List在第一個地方是靜態單例呢? –
@CallumLinington該列表在應用程序中異步修改。多個類訪問和修改列表 – chary