Code:
/ DotNET / DotNET / 8.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
- AppDomainFactory.cs
- HttpProfileGroupBase.cs
- HighlightComponent.cs
- ObjectAnimationBase.cs
- XamlReader.cs
- ConfigXmlElement.cs
- WorkflowItemsPresenter.cs
- XmlILIndex.cs
- Math.cs
- OleDbPropertySetGuid.cs
- UpdatePanelTriggerCollection.cs
- PackageProperties.cs
- OdbcStatementHandle.cs
- ICspAsymmetricAlgorithm.cs
- ImageField.cs
- HostingEnvironmentException.cs
- ProfileGroupSettings.cs
- StatusBarItemAutomationPeer.cs
- XPathNavigatorKeyComparer.cs
- ServiceModelConfigurationSectionCollection.cs
- FormsAuthentication.cs
- ToolStripCodeDomSerializer.cs
- ExtentKey.cs
- Command.cs
- XAMLParseException.cs
- TemplateInstanceAttribute.cs
- HwndMouseInputProvider.cs
- SecureStringHasher.cs
- Keyboard.cs
- CopyOnWriteList.cs
- NumberSubstitution.cs
- TableColumn.cs
- PreviewPrintController.cs
- OutputCacheProviderCollection.cs
- SR.Designer.cs
- UTF32Encoding.cs
- Rotation3DAnimationBase.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- cookieexception.cs
- WindowsComboBox.cs
- ChannelPoolSettings.cs
- SiteMapNode.cs
- ValidatorCollection.cs
- TrustLevelCollection.cs
- RunWorkerCompletedEventArgs.cs
- serverconfig.cs
- HashSet.cs
- PowerStatus.cs
- SystemException.cs
- XmlWhitespace.cs
- ToolboxDataAttribute.cs
- BCLDebug.cs
- DataPagerFieldCollection.cs
- CodeBinaryOperatorExpression.cs
- Vertex.cs
- WebPartManager.cs
- ErrorWebPart.cs
- XmlSchemaResource.cs
- Ref.cs
- ReferentialConstraint.cs
- DataBoundLiteralControl.cs
- LocalizableResourceBuilder.cs
- ToolStripContainerDesigner.cs
- StringValueSerializer.cs
- DataGridViewRowStateChangedEventArgs.cs
- AdRotator.cs
- CreateParams.cs
- LowerCaseStringConverter.cs
- RelAssertionDirectKeyIdentifierClause.cs
- ImageList.cs
- CellCreator.cs
- RoleBoolean.cs
- WindowsPrincipal.cs
- SingleAnimation.cs
- MtomMessageEncodingElement.cs
- HelpEvent.cs
- XmlBaseWriter.cs
- NumberSubstitution.cs
- PKCS1MaskGenerationMethod.cs
- ObjectSpanRewriter.cs
- BitConverter.cs
- GestureRecognitionResult.cs
- PersonalizationState.cs
- ValidationHelper.cs
- VisualTransition.cs
- NoneExcludedImageIndexConverter.cs
- FontEmbeddingManager.cs
- ReturnType.cs
- RequestQueryProcessor.cs
- ObfuscateAssemblyAttribute.cs
- PersonalizationEntry.cs
- OrderPreservingPipeliningMergeHelper.cs
- DtrList.cs
- SafeLibraryHandle.cs
- WebServiceErrorEvent.cs
- HttpCapabilitiesEvaluator.cs
- ConfigurationCollectionAttribute.cs
- MappingModelBuildProvider.cs
- OperationFormatter.cs
- SiteMapProvider.cs