/// <summary> /// Method BuildType. /// </summary> /// <typeparam name="TChannel">The channel to be used to connect to the service.</typeparam> /// <typeparam name="TTypeBuilder">The proxy class builder.</typeparam> /// <returns>Type object.</returns> internal static Type BuildType <TChannel, TTypeBuilder>() where TChannel : class where TTypeBuilder : IWcfClientTypeBuilder, new() { string typeName = typeof(TChannel).FullName.Replace(".", string.Empty) + typeof(TTypeBuilder).Name; if (TypeDictionary.ContainsKey(typeName)) { return(TypeDictionary[typeName]); } lock (SyncRoot) { if (TypeDictionary.ContainsKey(typeName)) { return(TypeDictionary[typeName]); } else { Type result = new TTypeBuilder().GenerateType(typeName); TypeDictionary.Add(typeName, result); return(result); } } }
/// <summary> /// Method BuildType. /// </summary> /// <typeparam name="TChannel">The channel to be used to connect to the service.</typeparam> /// <typeparam name="TTypeBuilder">The proxy class builder.</typeparam> /// <returns>Type object.</returns> public static Type BuildType <TChannel, TTypeBuilder>() where TChannel : class where TTypeBuilder : IWcfClientTypeBuilder, new() { string typeName = typeof(TChannel).FullName.Replace(".", string.Empty) + typeof(TTypeBuilder).Name; Lock.AcquireReaderLock(Timeout.Infinite); try { if (TypeDictionary.ContainsKey(typeName)) { return(TypeDictionary[typeName]); } else { LockCookie lockCookie = Lock.UpgradeToWriterLock(Timeout.Infinite); try { if (TypeDictionary.ContainsKey(typeName)) { return(TypeDictionary[typeName]); } else { Type result = new TTypeBuilder().GenerateType(typeName); TypeDictionary.Add(typeName, result); return(TypeDictionary[typeName]); } } finally { Lock.DowngradeFromWriterLock(ref lockCookie); } } } finally { Lock.ReleaseReaderLock(); } }