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
- _Win32.cs
- HandlerWithFactory.cs
- TcpPortSharing.cs
- ConnectionsZoneAutoFormat.cs
- autovalidator.cs
- HttpListenerContext.cs
- Model3DGroup.cs
- DynamicILGenerator.cs
- LinqDataView.cs
- Label.cs
- MoveSizeWinEventHandler.cs
- ColumnMapCopier.cs
- WindowsListBox.cs
- NamespaceList.cs
- Evidence.cs
- QuadraticBezierSegment.cs
- metadatamappinghashervisitor.cs
- AnnotationResource.cs
- X509Certificate.cs
- XamlGridLengthSerializer.cs
- FindResponse.cs
- SafeArrayRankMismatchException.cs
- RolePrincipal.cs
- QueryGeneratorBase.cs
- UrlPropertyAttribute.cs
- HitTestFilterBehavior.cs
- DataGridViewCellCollection.cs
- DynamicDataResources.Designer.cs
- ValidationErrorCollection.cs
- InlinedLocationReference.cs
- EdmRelationshipRoleAttribute.cs
- FileVersionInfo.cs
- RC2CryptoServiceProvider.cs
- MaskedTextBox.cs
- DuplicateDetector.cs
- DataGridViewColumnTypePicker.cs
- UnhandledExceptionEventArgs.cs
- BitmapFrame.cs
- ThumbAutomationPeer.cs
- SplitterCancelEvent.cs
- SourceLineInfo.cs
- ScrollChrome.cs
- WCFServiceClientProxyGenerator.cs
- ArrayList.cs
- DbConnectionPoolIdentity.cs
- DesignerDataColumn.cs
- EntityDataSource.cs
- UnsafeNativeMethods.cs
- XamlSerializerUtil.cs
- MetadataUtil.cs
- XmlBinaryReader.cs
- DiscoveryClientReferences.cs
- ColumnHeaderConverter.cs
- ChangeTracker.cs
- SqlFileStream.cs
- Roles.cs
- XmlStreamedByteStreamReader.cs
- PathData.cs
- UDPClient.cs
- CollectionContainer.cs
- Point3D.cs
- XPathSelfQuery.cs
- VisualProxy.cs
- DataGridViewCellMouseEventArgs.cs
- SafeHandle.cs
- TextEditorCharacters.cs
- QueueAccessMode.cs
- ConfigurationElement.cs
- JoinElimination.cs
- PathFigure.cs
- RenderDataDrawingContext.cs
- SessionStateSection.cs
- SymbolMethod.cs
- ListArgumentProvider.cs
- SignatureToken.cs
- SessionStateModule.cs
- FontFamilyIdentifier.cs
- RuleConditionDialog.Designer.cs
- PolicyChain.cs
- SingleStorage.cs
- ByteAnimationBase.cs
- StylusShape.cs
- Transform3D.cs
- LinkButton.cs
- VectorAnimationUsingKeyFrames.cs
- XmlSchemaParticle.cs
- AssemblyResourceLoader.cs
- FunctionImportMapping.cs
- DictionaryTraceRecord.cs
- ExpandableObjectConverter.cs
- LinkedList.cs
- HttpFileCollection.cs
- PassportIdentity.cs
- _IPv6Address.cs
- XslCompiledTransform.cs
- EntityContainerAssociationSetEnd.cs
- JsonMessageEncoderFactory.cs
- CustomBindingElementCollection.cs
- HttpModulesSection.cs
- OdbcInfoMessageEvent.cs