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); }
/// <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); }
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; }