Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / CompMod / System / ComponentModel / Design / Serialization / ContainerCodeDomSerializer.cs / 1 / ContainerCodeDomSerializer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design.Serialization { using System; using System.CodeDom; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Diagnostics; using System.Reflection; ////// This class is used to serialize things of type "IContainer". We route all containers /// to the designer host's container. /// internal class ContainerCodeDomSerializer : CodeDomSerializer { private const string _containerName = "components"; private static ContainerCodeDomSerializer _defaultSerializer; ////// Retrieves a default static instance of this serializer. /// internal new static ContainerCodeDomSerializer Default { get { if (_defaultSerializer == null) { _defaultSerializer = new ContainerCodeDomSerializer(); } return _defaultSerializer; } } ////// We override this so we can always provide the correct container as a reference. /// protected override object DeserializeInstance(IDesignerSerializationManager manager, Type type, object[] parameters, string name, bool addToContainer) { if (typeof(IContainer).IsAssignableFrom(type)) { object obj = manager.GetService(typeof(IContainer)); if (obj != null) { Trace("Returning IContainer service as container"); manager.SetName(obj, name); return obj; } } Trace("No IContainer service, creating default container."); return base.DeserializeInstance(manager, type, parameters, name, addToContainer); } ////// Serializes the given object into a CodeDom object. We serialize an IContainer by /// declaring an IContainer member variable and then assigning a Container into it. /// public override object Serialize(IDesignerSerializationManager manager, object value) { // See if there is a type declaration on the stack. If there is, create a field representing // the container member variable. CodeTypeDeclaration typeDecl = manager.Context[typeof(CodeTypeDeclaration)] as CodeTypeDeclaration; RootContext rootCxt = manager.Context[typeof(RootContext)] as RootContext; CodeStatementCollection statements = new CodeStatementCollection(); CodeExpression lhs; if (typeDecl != null && rootCxt != null) { CodeMemberField field = new CodeMemberField(typeof(IContainer), _containerName); field.Attributes = MemberAttributes.Private; typeDecl.Members.Add(field); lhs = new CodeFieldReferenceExpression(rootCxt.Expression, _containerName); } else { CodeVariableDeclarationStatement var = new CodeVariableDeclarationStatement(typeof(IContainer), _containerName); statements.Add(var); lhs = new CodeVariableReferenceExpression(_containerName); } // Now create the container SetExpression(manager, value, lhs); CodeObjectCreateExpression objCreate = new CodeObjectCreateExpression(typeof(Container)); CodeAssignStatement assign = new CodeAssignStatement(lhs, objCreate); assign.UserData["IContainer"] = "IContainer"; statements.Add(assign); return statements; } } } // 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
- DesignColumnCollection.cs
- MetadataArtifactLoaderCompositeResource.cs
- ClientSettingsProvider.cs
- MD5.cs
- WindowsFormsLinkLabel.cs
- SqlMultiplexer.cs
- RelativeSource.cs
- ListBoxItemWrapperAutomationPeer.cs
- AdRotator.cs
- MimeTypeMapper.cs
- ResourceBinder.cs
- Trigger.cs
- _SslSessionsCache.cs
- XmlBinaryReader.cs
- TaskExtensions.cs
- ResourceSetExpression.cs
- DocumentOrderComparer.cs
- arabicshape.cs
- ControlAdapter.cs
- path.cs
- FixedSOMPageElement.cs
- CrossAppDomainChannel.cs
- ExpressionNode.cs
- FieldNameLookup.cs
- WebPartDisplayModeEventArgs.cs
- DataRecordInfo.cs
- querybuilder.cs
- PageAdapter.cs
- FieldNameLookup.cs
- Int32KeyFrameCollection.cs
- RectValueSerializer.cs
- ByteAnimation.cs
- PropertiesTab.cs
- ObjectListItemCollection.cs
- ExpressionBuilder.cs
- ItemsControl.cs
- Section.cs
- CustomAttribute.cs
- HtmlInputImage.cs
- Property.cs
- SQLBinaryStorage.cs
- AlgoModule.cs
- SelectionUIService.cs
- CompilationLock.cs
- _TimerThread.cs
- URLBuilder.cs
- UnsafeNativeMethods.cs
- Msmq.cs
- TCEAdapterGenerator.cs
- UiaCoreApi.cs
- IndexedEnumerable.cs
- MenuItemBinding.cs
- GlyphsSerializer.cs
- ActiveXSite.cs
- AttributeEmitter.cs
- OleStrCAMarshaler.cs
- ApplicationManager.cs
- PageContentCollection.cs
- ThreadStaticAttribute.cs
- JapaneseLunisolarCalendar.cs
- TimeSpanHelper.cs
- SequentialUshortCollection.cs
- Geometry3D.cs
- TdsValueSetter.cs
- ModelUtilities.cs
- CodeExporter.cs
- SerializeAbsoluteContext.cs
- GroupQuery.cs
- COM2PictureConverter.cs
- _StreamFramer.cs
- FormsAuthenticationCredentials.cs
- DataErrorValidationRule.cs
- MappingException.cs
- CompoundFileIOPermission.cs
- FormConverter.cs
- Substitution.cs
- AnimationClock.cs
- BaseCAMarshaler.cs
- AttributeCollection.cs
- _Semaphore.cs
- ScrollBarAutomationPeer.cs
- PinnedBufferMemoryStream.cs
- SelectionRange.cs
- SqlDataReaderSmi.cs
- WebEventCodes.cs
- DBBindings.cs
- WebReference.cs
- DiscoveryDocument.cs
- RectAnimationClockResource.cs
- MeasurementDCInfo.cs
- MissingSatelliteAssemblyException.cs
- TypeSemantics.cs
- FileUpload.cs
- SqlCommandSet.cs
- DataServiceContext.cs
- IpcPort.cs
- Int64Animation.cs
- CodeTypeReference.cs
- ImageCreator.cs
- DeviceOverridableAttribute.cs