Exemplo n.º 1
0
        /// <summary>
        /// 从缓存中获取实例
        /// </summary>
        /// <param name="type"></param>
        /// <param name="handler"></param>
        /// <param name="scope"></param>
        /// <returns>是否是从缓存中获取</returns>
        public void GetDynamicHandler(Type type, out IBytesHandler handler, out IServiceScope scope)
        {
            scope = null;
            if (CacheLength == 0)
            {
                scope = _autofac.CreateScope();
                var sp = scope.ServiceProvider;
                handler = sp.GetService(type) as IBytesHandler;
                return;
            }
            if (!dynamicDics.ContainsKey(type))
            {
                lock (dynamicDics)
                {
                    if (!dynamicDics.ContainsKey(type))
                    {
                        dynamicDics.TryAdd(type, new ConcurrentStack <IBytesHandler>());
                    }
                }
            }
            var stack = dynamicDics[type];
            var flag  = stack.TryPop(out handler);

            if (!flag)
            {
                scope = _autofac.CreateScope();
                var sp = scope.ServiceProvider;
                handler = sp.GetService(type) as IBytesHandler;
            }
        }
Exemplo n.º 2
0
        public void ResteDymaicHandler(IBytesHandler handler, Type type, IServiceScope scope)
        {
            if (CacheLength == 0)
            {
                scope?.Dispose();
                return;
            }
            var stack = dynamicDics[type];

            if (stack.Count < CacheLength)
            {
                stack.Push(handler);
            }
            else
            {
                scope?.Dispose();
            }
        }