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
- CqlParser.cs
- MailWebEventProvider.cs
- SqlConnectionPoolProviderInfo.cs
- DefaultValueAttribute.cs
- EditingCoordinator.cs
- CustomAttributeBuilder.cs
- SafeLibraryHandle.cs
- EncodingDataItem.cs
- FixUp.cs
- ZeroOpNode.cs
- SingleAnimationBase.cs
- DbConnectionOptions.cs
- NameSpaceExtractor.cs
- NullableConverter.cs
- precedingsibling.cs
- WindowsGraphicsCacheManager.cs
- Matrix.cs
- TransformPatternIdentifiers.cs
- SafeLibraryHandle.cs
- Padding.cs
- FileFormatException.cs
- CharacterShapingProperties.cs
- AudioFormatConverter.cs
- RangeContentEnumerator.cs
- RemoteArgument.cs
- RelationshipConstraintValidator.cs
- AuthenticationModuleElement.cs
- PartialTrustHelpers.cs
- ConfigPathUtility.cs
- CodeMemberMethod.cs
- OdbcHandle.cs
- ItemCheckEvent.cs
- Set.cs
- ImageMap.cs
- WebAdminConfigurationHelper.cs
- Light.cs
- PlainXmlDeserializer.cs
- DesignerLinkAdapter.cs
- ObjectQuery_EntitySqlExtensions.cs
- SafeSecurityHandles.cs
- BindingValueChangedEventArgs.cs
- SqlUdtInfo.cs
- DataGridViewCellConverter.cs
- SoapMessage.cs
- MemoryMappedView.cs
- ChannelSinkStacks.cs
- MenuItemCollectionEditorDialog.cs
- WorkflowServiceBehavior.cs
- CssStyleCollection.cs
- SymDocumentType.cs
- LookupNode.cs
- ApplicationHost.cs
- SingleTagSectionHandler.cs
- ThreadStateException.cs
- CredentialCache.cs
- XmlSchemaFacet.cs
- Variant.cs
- EventLog.cs
- XmlHierarchicalEnumerable.cs
- LoggedException.cs
- Clipboard.cs
- QuaternionConverter.cs
- DataServiceCollectionOfT.cs
- ChannelBinding.cs
- PriorityBinding.cs
- ExpandCollapsePattern.cs
- TemplateParser.cs
- ThreadAttributes.cs
- TcpStreams.cs
- NullableDecimalSumAggregationOperator.cs
- TextEditorMouse.cs
- FamilyTypefaceCollection.cs
- PageTheme.cs
- ObjectItemLoadingSessionData.cs
- SHA1Managed.cs
- AssertFilter.cs
- HitTestParameters.cs
- mongolianshape.cs
- DataGridViewComboBoxEditingControl.cs
- FileRegion.cs
- RewritingSimplifier.cs
- PersonalizationEntry.cs
- LongTypeConverter.cs
- AsymmetricSecurityProtocol.cs
- Context.cs
- StringConverter.cs
- MatrixTransform.cs
- CellIdBoolean.cs
- EntityClassGenerator.cs
- ObjectItemCollection.cs
- FastEncoderWindow.cs
- DynamicPropertyHolder.cs
- RequestQueryProcessor.cs
- MarshalDirectiveException.cs
- ContentPlaceHolder.cs
- ByteStream.cs
- ToolStripItemCollection.cs
- OptimizerPatterns.cs
- ValueCollectionParameterReader.cs
- Metafile.cs