Exemplo n.º 1
0
        public static T Fetch <T, K1>(K1 k1) where T : BaseComponent
        {
            var           type = typeof(T);
            BaseComponent result;

            if (IsSingleType(type))
            {
                if (!SingleCaseComponents.TryGetValue(type, out result))
                {
                    result = ComponentFactory.CreateComponent(type, k1);
                    SetId(result);
                    SingleCaseComponents[type] = result;
                }
            }
            else
            {
                if (!TypeComponents.TryGetValue(type, out ConcurrentQueue <BaseComponent> queue))
                {
                    queue = new ConcurrentQueue <BaseComponent>();
                    TypeComponents[type] = queue;
                }

                if (!queue.TryDequeue(out result))
                {
                    result = ComponentFactory.CreateComponent(type, k1);
                }

                SetId(result);
                IdComponents[result.Id] = result;
            }
            return((T)result);
        }
Exemplo n.º 2
0
        public static BaseComponent Fetch(Type type)
        {
            BaseComponent result;

            if (IsSingleType(type))
            {
                if (!SingleCaseComponents.TryGetValue(type, out result))
                {
                    result = ComponentFactory.CreateComponent(type);
                    SetId(result);
                    SingleCaseComponents[type] = result;
                }
            }
            else
            {
                if (!TypeComponents.TryGetValue(type, out ConcurrentQueue <BaseComponent> queue))
                {
                    queue = new ConcurrentQueue <BaseComponent>();
                    TypeComponents[type] = queue;
                }

                if (!queue.TryDequeue(out result))
                {
                    result = ComponentFactory.CreateComponent(type);
                }

                SetId(result);
                IdComponents[result.Id] = result;
            }
            return(result);
        }