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
- Viewport2DVisual3D.cs
- VerificationException.cs
- AxHost.cs
- OutputWindow.cs
- ItemMap.cs
- TheQuery.cs
- ByteConverter.cs
- XmlDataSourceView.cs
- JsonSerializer.cs
- IdentityReference.cs
- XmlDataImplementation.cs
- BaseComponentEditor.cs
- DataTable.cs
- PhysicalAddress.cs
- OneOfConst.cs
- ColumnWidthChangingEvent.cs
- NameScope.cs
- SplashScreen.cs
- Header.cs
- DBCommandBuilder.cs
- MgmtConfigurationRecord.cs
- MethodAccessException.cs
- SelectorItemAutomationPeer.cs
- BoolLiteral.cs
- ToolStripMenuItemDesigner.cs
- TextEditorTyping.cs
- assemblycache.cs
- InkCanvasSelectionAdorner.cs
- HttpCachePolicyElement.cs
- ServicePointManagerElement.cs
- CommandValueSerializer.cs
- UIElementHelper.cs
- SendOperation.cs
- XamlFilter.cs
- KnownColorTable.cs
- CreateRefExpr.cs
- SystemFonts.cs
- DPCustomTypeDescriptor.cs
- SemanticKeyElement.cs
- MsdtcClusterUtils.cs
- ContentPosition.cs
- TrackPoint.cs
- IISUnsafeMethods.cs
- ListControlDataBindingHandler.cs
- Matrix3D.cs
- FixedTextContainer.cs
- QueryTask.cs
- ISCIIEncoding.cs
- mediaeventshelper.cs
- EventTrigger.cs
- KeyProperty.cs
- TabRenderer.cs
- nulltextcontainer.cs
- SaveFileDialog.cs
- Timer.cs
- XmlSchemaAll.cs
- GAC.cs
- BufferedWebEventProvider.cs
- EntitySet.cs
- FlowLayout.cs
- TdsRecordBufferSetter.cs
- DataRelationCollection.cs
- MediaContextNotificationWindow.cs
- SimplePropertyEntry.cs
- WebHostedComPlusServiceHost.cs
- LinkClickEvent.cs
- ThumbAutomationPeer.cs
- _BaseOverlappedAsyncResult.cs
- InvalidDataContractException.cs
- TabPageDesigner.cs
- ClientScriptItem.cs
- StateManagedCollection.cs
- ImmutableDispatchRuntime.cs
- Compress.cs
- InstanceDataCollectionCollection.cs
- ClassHandlersStore.cs
- behaviorssection.cs
- RemotingException.cs
- DataGridBoolColumn.cs
- RuleConditionDialog.Designer.cs
- SmtpReplyReader.cs
- Triplet.cs
- EntityDataSourceContextDisposingEventArgs.cs
- PageEventArgs.cs
- URLEditor.cs
- wgx_commands.cs
- WindowsContainer.cs
- Enlistment.cs
- ObjectStateEntryDbDataRecord.cs
- ZipIOLocalFileDataDescriptor.cs
- AssemblyName.cs
- ACL.cs
- ALinqExpressionVisitor.cs
- AvtEvent.cs
- SafeHandles.cs
- CommittableTransaction.cs
- CacheEntry.cs
- Parameter.cs
- Pens.cs
- SchemaSetCompiler.cs