Пример #1
0
            public override bool Equals(object obj)
            {
                if (this == obj)
                {
                    return(true);
                }
                ProxyTypeCacheKey proxyTypeCacheKey = obj as ProxyTypeCacheKey;

                if (proxyTypeCacheKey == null)
                {
                    return(false);
                }
                if (!Equals(targetType, proxyTypeCacheKey.targetType))
                {
                    return(false);
                }
                if (!Equals(baseType, proxyTypeCacheKey.baseType))
                {
                    return(false);
                }
                for (int i = 0; i < interfaceTypes.Count; i++)
                {
                    if (!Equals(interfaceTypes[i], proxyTypeCacheKey.interfaceTypes[i]))
                    {
                        return(false);
                    }
                }
                if (proxyTargetAttributes != proxyTypeCacheKey.proxyTargetAttributes)
                {
                    return(false);
                }
                return(true);
            }
Пример #2
0
        /// <summary>
        /// Generates the proxy type and caches the <see cref="System.Type"/>
        /// instance against the base type and the interfaces to proxy.
        /// </summary>
        /// <param name="typeBuilder">
        /// The <see cref="Spring.Proxy.IProxyTypeBuilder"/> to use
        /// </param>
        /// <returns>The generated or cached proxy class.</returns>
        protected override Type BuildProxyType(IProxyTypeBuilder typeBuilder)
        {
            ProxyTypeCacheKey cacheKey = new ProxyTypeCacheKey(
                typeBuilder.BaseType, typeBuilder.TargetType, typeBuilder.Interfaces, typeBuilder.ProxyTargetAttributes);
            Type proxyType = null;

            lock (typeCache)
            {
                proxyType = typeCache[cacheKey] as Type;
                if (proxyType == null)
                {
                    proxyType           = typeBuilder.BuildProxyType();
                    typeCache[cacheKey] = proxyType;
                }
                else
                {
                    #region Instrumentation

                    if (logger.IsDebugEnabled)
                    {
                        logger.DebugFormat("AOP proxy type found in cache for '{0}'.", cacheKey);
                    }

                    #endregion
                }
            }
            return(proxyType);
        }
Пример #3
0
        protected virtual Type BuildProxyType(IProxyTypeBuilder typeBuilder)
        {
            ProxyTypeCacheKey cacheKey = new ProxyTypeCacheKey(typeBuilder.BaseType, typeBuilder.TargetType, typeBuilder.Interfaces, typeBuilder.ProxyTargetAttributes);

            if (!typeCache.TryGetValue(cacheKey, out Type proxyType))
            {
                proxyType = typeBuilder.BuildProxyType();
                typeCache.AddOrUpdate(cacheKey, proxyType, (k, old) => proxyType);
                //typeCache.TryAdd(cacheKey, proxyType);
            }
            return(proxyType);
        }
        /// <summary>
        /// Generates the proxy type and caches the <see cref="System.Type"/>
        /// instance against the base type and the interfaces to proxy.
        /// </summary>
        /// <param name="typeBuilder">
        /// The <see cref="Spring.Proxy.IProxyTypeBuilder"/> to use
        /// </param>
        /// <returns>The generated or cached proxy class.</returns>
        protected override Type BuildProxyType(IProxyTypeBuilder typeBuilder)
        {
            ProxyTypeCacheKey cacheKey = new ProxyTypeCacheKey(
                typeBuilder.BaseType, typeBuilder.TargetType, typeBuilder.Interfaces, typeBuilder.ProxyTargetAttributes);
            Type proxyType = null;
            lock (typeCache)
            {
                proxyType = typeCache[cacheKey] as Type;
                if (proxyType == null)
                {
                    proxyType = typeBuilder.BuildProxyType();
                    typeCache[cacheKey] = proxyType;
                }
                else
                {
                    #region Instrumentation

                    if (logger.IsInfoEnabled)
                    {
                        logger.Info(String.Format(
                                        "AOP proxy type found in cache for '{0}'.", cacheKey));
                    }

                    #endregion
                }
            }
            return proxyType;
        }