示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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()); }
        }
示例#6
0
 /// <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));
     }
 }