/// <summary> /// 注册永久 /// </summary> public Guid RegManual <T>(T obj) { TicketedObject <T> tObject = new TicketedObject <T>(obj) { Strategy = TicketedObject.StrategyEnum.Manual }; lock (_Locker) { _Data.Add <TicketedObject <T> >(tObject, tObject.Id.ToISFormatted()); } return(tObject.Id); }
public Guid RegTimer <T>(T obj, TimeSpan ts) { TicketedObject <T> tObject = new TicketedObject <T>(obj) { Strategy = TicketedObject.StrategyEnum.Timer, ValidPeriod = ts }; lock (_Locker) { _Data.Add <TicketedObject <T> >(tObject, tObject.Id.ToISFormatted()); } return(tObject.Id); }
/// <summary> /// 注册按次数获取的 /// </summary> public Guid RegCounter <T>(T obj, int count = 1) { TicketedObject <T> tObject = new TicketedObject <T>(obj) { Strategy = TicketedObject.StrategyEnum.Counter, Counter = count }; lock (_Locker) { _Data.Add <TicketedObject <T> >(tObject, tObject.Id.ToISFormatted()); } return(tObject.Id); }
/// <summary> /// 获取对象(通用) /// </summary> public object Get(Guid id) { Pulse(); if (!_Data.Contains(id.ToISFormatted())) { return(null); } TicketedObject tObj = _Data[id.ToISFormatted()] as TicketedObject; object obj = tObj.GetObject(); Pulse(); return(obj); }
/// <summary> /// 注册单例(每次注册将删除前一实例) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <param name="id"></param> public void RegSingle <T>(T obj, Guid id) { if (_Data.Contains(id.ToISFormatted())) { _Data.Remove(id.ToISFormatted()); } TicketedObject <T> tObject = new TicketedObject <T>(obj, id) { Strategy = TicketedObject.StrategyEnum.Single }; lock (_Locker) { _Data.Add <TicketedObject <T> >(tObject, id.ToISFormatted()); } }
/// <summary> /// 巡检 /// </summary> public void Pulse() { if (_Data.Count == 0) { return; } lock (_Locker) { List <object> deleted = new List <object>(); foreach (DictionaryEntry de in _Data) { if (de.Value is TicketedObject) { TicketedObject tObj = de.Value as TicketedObject; if (tObj.Removable()) { deleted.Add(de.Key); } } } deleted.ForEach(key => _Data.Remove(key)); } }