Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / ComIntegration / EmitterCache.cs / 1 / EmitterCache.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.ComIntegration { using System; using System.Reflection; using System.Reflection.Emit; using System.Collections.Generic; using System.Threading; using System.Runtime.InteropServices; internal class EmitterCache { private static EmitterCache Provider = null; private static object initLock = new object (); internal static EmitterCache TypeEmitter { get { lock (initLock) { if (Provider == null) { EmitterCache localProvider = new EmitterCache(); Thread.MemoryBarrier(); Provider = localProvider; } } if (Provider == null) { DiagnosticUtility.DebugAssert("Provider should not be null"); #pragma warning suppress 56503 // throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(true); } return Provider; } } ModuleBuilder DynamicModule; AssemblyBuilder assemblyBuilder; DictionaryinterfaceToClassMap ; private EmitterCache () { AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = Guid.NewGuid().ToString (); assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); DynamicModule = assemblyBuilder.DefineDynamicModule (Guid.NewGuid().ToString () ); interfaceToClassMap = new Dictionary (); } private Type [] GetParameterTypes (MethodInfo mInfo) { ParameterInfo [] parameters = mInfo.GetParameters (); Type [] typeArray = new Type [parameters.Length ]; int index = 0; for (; index < parameters.Length; index++) { typeArray [index] = parameters [index].ParameterType ; } return typeArray; } internal Type FindOrCreateType (Type interfaceType) { if (!interfaceType.IsInterface) { DiagnosticUtility.DebugAssert("Passed in type should be an Interface"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(false); } Type classType = null; lock(this) { interfaceToClassMap.TryGetValue (interfaceType, out classType); if (classType == null) { TypeBuilder typeBuilder = DynamicModule.DefineType(interfaceType.Name + "MarshalByRefObject", TypeAttributes.Public | TypeAttributes.Class | TypeAttributes.Abstract, typeof(MarshalByRefObject), new Type[] { interfaceType }); Type[] ctorParams = new Type[] { typeof(ClassInterfaceType) }; ConstructorInfo classCtorInfo = typeof(ClassInterfaceAttribute).GetConstructor(ctorParams); CustomAttributeBuilder attributeBuilder = new CustomAttributeBuilder(classCtorInfo, new object[] { ClassInterfaceType.None }); typeBuilder.SetCustomAttribute(attributeBuilder); typeBuilder.AddInterfaceImplementation(interfaceType); foreach (MethodInfo mInfo in interfaceType.GetMethods()) { MethodBuilder methodInClass = null; methodInClass = typeBuilder.DefineMethod(mInfo.Name, MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Abstract | MethodAttributes.Abstract | MethodAttributes.HideBySig | MethodAttributes.NewSlot, mInfo.ReturnType, GetParameterTypes(mInfo)); } classType = typeBuilder.CreateType(); interfaceToClassMap[interfaceType] = classType; } } if (classType == null) { DiagnosticUtility.DebugAssert("Class Type should not be null at this point"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(false); } return classType; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- VScrollBar.cs
- Mouse.cs
- TypeSchema.cs
- ReflectionUtil.cs
- SmiContextFactory.cs
- ServiceHostFactory.cs
- DataGridViewToolTip.cs
- InvalidCastException.cs
- DesignerVerb.cs
- XXXInfos.cs
- DateTimeUtil.cs
- SecondaryIndexDefinition.cs
- TraceListener.cs
- RectAnimationUsingKeyFrames.cs
- LogLogRecordEnumerator.cs
- MD5.cs
- DispatcherTimer.cs
- CodeConditionStatement.cs
- EarlyBoundInfo.cs
- CryptoKeySecurity.cs
- ComponentEditorForm.cs
- SpeechDetectedEventArgs.cs
- HttpModuleActionCollection.cs
- DataGridRowHeaderAutomationPeer.cs
- WebBrowser.cs
- OlePropertyStructs.cs
- XamlDesignerSerializationManager.cs
- ActivitiesCollection.cs
- ContentIterators.cs
- srgsitem.cs
- WebConfigurationManager.cs
- Sorting.cs
- DataGridState.cs
- Point.cs
- ExtendedProperty.cs
- ErrorHandlingReceiver.cs
- DataGridViewUtilities.cs
- CultureInfo.cs
- EncryptedPackageFilter.cs
- ValidationSummaryDesigner.cs
- wmiprovider.cs
- ImageList.cs
- ServiceOperationInfoTypeConverter.cs
- UInt32Converter.cs
- XamlVector3DCollectionSerializer.cs
- FtpWebResponse.cs
- Slider.cs
- AsnEncodedData.cs
- COM2PropertyBuilderUITypeEditor.cs
- AspProxy.cs
- CodeTypeReference.cs
- SmtpFailedRecipientException.cs
- FactoryGenerator.cs
- WebPartZoneCollection.cs
- LoginView.cs
- ClickablePoint.cs
- System.Data_BID.cs
- DirectoryLocalQuery.cs
- ClientRoleProvider.cs
- AdornerDecorator.cs
- DataSysAttribute.cs
- WindowsListViewScroll.cs
- ErrorBehavior.cs
- dataSvcMapFileLoader.cs
- Point3DCollectionValueSerializer.cs
- TextFindEngine.cs
- RootContext.cs
- HwndHost.cs
- FocusTracker.cs
- peersecurityelement.cs
- UrlEncodedParameterWriter.cs
- DbParameterHelper.cs
- TextFormatterHost.cs
- UrlMappingsModule.cs
- Polyline.cs
- ColorIndependentAnimationStorage.cs
- Bold.cs
- DeferredSelectedIndexReference.cs
- CookieProtection.cs
- XPathNodeHelper.cs
- FeatureSupport.cs
- IResourceProvider.cs
- NativeWrapper.cs
- SchemaTypeEmitter.cs
- unsafenativemethodstextservices.cs
- RowParagraph.cs
- XmlEntity.cs
- PropertyTab.cs
- UrlPath.cs
- IERequestCache.cs
- Context.cs
- Point.cs
- Line.cs
- InsufficientMemoryException.cs
- QuerySubExprEliminator.cs
- StylusCaptureWithinProperty.cs
- ResponseBodyWriter.cs
- TableDetailsRow.cs
- StrongNameUtility.cs
- Psha1DerivedKeyGenerator.cs