Exemple #1
0
        private T GetInstanceInList <T>(List <ICacheAble> list, CrateNewOne crateNewOne = null, System.Object[] param = null, OnDestroy <T> onDestroy = null) where T : class
        {
            ICacheAble curCacheItem;

            for (int i = 0; i < list.Count; i++)
            {
                curCacheItem = list[i];
                if (curCacheItem.IsFree())
                {
                    T t = (T)curCacheItem.GetInstance();
                    busyDic.Add(t, curCacheItem);
                    return(t);
                }
            }

            if (crateNewOne != null)
            {
                T instance = (T)crateNewOne(param);
                curCacheItem = CacheItem <T> .Crate(instance, null, onDestroy);

                busyDic.Add(instance, curCacheItem);
                return(instance);
            }

            return(null);
        }
Exemple #2
0
        public T Get <T>(string group, CrateNewOne crateNewOne = null, System.Object[] param = null, OnDestroy <T> onDestroy = null) where T : class
        {
            List <ICacheAble> cacheList;

            cacheDic.TryGetValue(group, out cacheList);

            ICacheAble curCacheItem;

            if (cacheList != null)
            {
                Debug.LogWarning(String.Format("cacheList.Count {0}", cacheList.Count));

                for (int i = 0; i < cacheList.Count; i++)
                {
                    curCacheItem = cacheList[i];
                    if (curCacheItem.IsFree())
                    {
                        T t = (T)curCacheItem.GetInstance();
                        curCacheItem.Busy();
                        busyDic.Add(t, curCacheItem);
                        return(t);
                    }
                }

                T instance = (T)crateNewOne(param);
                curCacheItem = CacheItem <T> .Crate(instance, group, onDestroy);

                curCacheItem.Busy();
                cacheList.Add(curCacheItem);
                busyDic.Add(instance, curCacheItem);

                return(instance);
            }
            else
            if (crateNewOne != null)
            {
                cacheList = new List <ICacheAble> ();
                // call your factory
                T instance = (T)crateNewOne(param);
                curCacheItem = CacheItem <T> .Crate(instance, group, onDestroy);

                curCacheItem.Busy();
                cacheList.Add(curCacheItem);
                cacheDic.Add(group, cacheList);
                busyDic.Add(instance, curCacheItem);

                return(instance);
            }

            return(null);
        }
Exemple #3
0
 public T Get <T>(CrateNewOne crateNewOne = null) where T : class
 {
     return(GetInstanceInList <T>(cache, crateNewOne));
 }