Beispiel #1
0
        public Object Invoke(Object[] parameters)
        {
            if (handler != null)
            {
                return(handler(parameters));
            }

            Int32 moduleKey  = info.Module.GetHashCode();
            Int32 handlerKey = info.MetadataToken;

            handler = DynamicCacheFactory <DynamicConstructorInfoHandler> .Caches
                      .GetOrAdd(moduleKey, innerModuleKey => new ConcurrentDictionary <Int32, DynamicConstructorInfoHandler>())
                      .GetOrAdd(handlerKey, (Int32 innerHandlerKey) => DynamicMethodFactory.CreateDynamicConstructorInfoHandler(type, info));

            return(handler(parameters));
        }
        /// <summary>
        /// 根据构造函数和参数,创建对象
        /// </summary>
        /// <param name="constructorInfo">构造函数</param>
        /// <param name="parameters">参数值</param>
        /// <returns>对象</returns>
        public static object CreatInstance(ConstructorInfo constructorInfo, object[] parameters)
        {
            DynamicConstructorInfoHandler handler = null;
            int key = constructorInfo.MetadataToken;

#if Server
            handler = CacheConstructor.GetOrAdd(key, new Func <int, DynamicConstructorInfoHandler>((i) => CreateDynamicConstructorInfoHandler(constructorInfo)));
#else
            lock (CacheConstructor)
            {
                if (CacheConstructor.ContainsKey(key))
                {
                    handler = CacheConstructor[key];
                }
                else
                {
                    handler = CreateDynamicConstructorInfoHandler(constructorInfo);
                    CacheConstructor.Add(key, handler);
                }
            }
#endif

            return(handler(parameters));
        }