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
- TypeUtil.cs
- DataExpression.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- DataGridViewSortCompareEventArgs.cs
- SamlDoNotCacheCondition.cs
- ProgressBar.cs
- ISAPIWorkerRequest.cs
- SectionVisual.cs
- ToolStripItemEventArgs.cs
- XmlSchemaInferenceException.cs
- OrderingQueryOperator.cs
- GradientStop.cs
- HttpCapabilitiesBase.cs
- WaitForChangedResult.cs
- _AutoWebProxyScriptHelper.cs
- SchemaImporterExtension.cs
- DataSourceSelectArguments.cs
- ConversionHelper.cs
- SingleSelectRootGridEntry.cs
- LineGeometry.cs
- SerializeAbsoluteContext.cs
- TransportSecurityHelpers.cs
- XmlIncludeAttribute.cs
- glyphs.cs
- ToolStripStatusLabel.cs
- RuleSettings.cs
- StylusPlugInCollection.cs
- DocComment.cs
- MasterPageParser.cs
- FileChangesMonitor.cs
- ResolveNameEventArgs.cs
- WaitForChangedResult.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- TemplateBindingExtension.cs
- Freezable.cs
- FieldValue.cs
- CountdownEvent.cs
- SoundPlayerAction.cs
- ListControlDesigner.cs
- ResourceKey.cs
- NetworkStream.cs
- Convert.cs
- PipelineModuleStepContainer.cs
- DocumentSchemaValidator.cs
- FlowThrottle.cs
- PenThreadWorker.cs
- EraserBehavior.cs
- TimeoutException.cs
- SqlTypeSystemProvider.cs
- DataColumnCollection.cs
- CopyNamespacesAction.cs
- IncomingWebResponseContext.cs
- SchemaImporter.cs
- ClientSettings.cs
- WindowsIdentity.cs
- ConsoleTraceListener.cs
- MatrixAnimationUsingKeyFrames.cs
- DocumentXPathNavigator.cs
- BindingOperations.cs
- SafePEFileHandle.cs
- UnrecognizedPolicyAssertionElement.cs
- ButtonBaseAdapter.cs
- TransactionBridge.cs
- IdentitySection.cs
- XmlSerializationWriter.cs
- NativeMethods.cs
- configsystem.cs
- NameObjectCollectionBase.cs
- mongolianshape.cs
- DirectoryInfo.cs
- TextEditorContextMenu.cs
- Authorization.cs
- SiteMapHierarchicalDataSourceView.cs
- CellLabel.cs
- Timer.cs
- SecurityValidationBehavior.cs
- LineVisual.cs
- ArrayTypeMismatchException.cs
- MouseEventArgs.cs
- SQLChars.cs
- BackgroundWorker.cs
- RawStylusInputCustomDataList.cs
- ListControl.cs
- StyleModeStack.cs
- PrePostDescendentsWalker.cs
- CodeVariableReferenceExpression.cs
- SessionStateItemCollection.cs
- UnionCodeGroup.cs
- XPathPatternBuilder.cs
- dataprotectionpermissionattribute.cs
- XPathNodeHelper.cs
- TdsEnums.cs
- ScalarOps.cs
- AssemblyFilter.cs
- LineSegment.cs
- HMACSHA1.cs
- ColorContextHelper.cs
- Propagator.JoinPropagator.cs
- Deflater.cs
- SpecialFolderEnumConverter.cs