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); }
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); }
public T Get <T>(CrateNewOne crateNewOne = null) where T : class { return(GetInstanceInList <T>(cache, crateNewOne)); }