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
- ScaleTransform3D.cs
- AttributeUsageAttribute.cs
- SafeRegistryHandle.cs
- StatusBar.cs
- SwitchElementsCollection.cs
- CommandConverter.cs
- TextRenderer.cs
- _FtpDataStream.cs
- XmlAtomicValue.cs
- ConfigurationPropertyCollection.cs
- SqlServer2KCompatibilityCheck.cs
- ComponentDispatcherThread.cs
- DictionaryBase.cs
- Helper.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- QueryContinueDragEventArgs.cs
- FullTextLine.cs
- InternalUserCancelledException.cs
- StoreItemCollection.cs
- OracleInternalConnection.cs
- DockPattern.cs
- IMembershipProvider.cs
- CompositeControl.cs
- SizeChangedEventArgs.cs
- ReadOnlyState.cs
- OdbcParameterCollection.cs
- TimeSpanStorage.cs
- SettingsPropertyCollection.cs
- XmlDownloadManager.cs
- HtmlInputSubmit.cs
- RowType.cs
- TreeNodeCollection.cs
- LicenseContext.cs
- ResolveNameEventArgs.cs
- WorkflowApplicationAbortedException.cs
- IxmlLineInfo.cs
- EllipticalNodeOperations.cs
- MetadataProperty.cs
- serverconfig.cs
- RSAOAEPKeyExchangeDeformatter.cs
- QilVisitor.cs
- GuidConverter.cs
- X509Certificate2Collection.cs
- DispatcherFrame.cs
- SafeLocalAllocation.cs
- RegexReplacement.cs
- AttributeEmitter.cs
- ToolStripSeparator.cs
- GridViewEditEventArgs.cs
- _SingleItemRequestCache.cs
- TreeViewCancelEvent.cs
- precedingquery.cs
- Select.cs
- HostingPreferredMapPath.cs
- FusionWrap.cs
- FormatSettings.cs
- WebBaseEventKeyComparer.cs
- LayoutUtils.cs
- CreateUserErrorEventArgs.cs
- QilGenerator.cs
- SqlBuilder.cs
- InvokeFunc.cs
- TiffBitmapDecoder.cs
- ScriptModule.cs
- Baml2006ReaderFrame.cs
- MarkupCompilePass1.cs
- SettingsPropertyCollection.cs
- BuildResultCache.cs
- WinEventQueueItem.cs
- ByteConverter.cs
- LinkTarget.cs
- WindowsGraphics.cs
- WebHostedComPlusServiceHost.cs
- SyndicationSerializer.cs
- SynchronizationLockException.cs
- ObjectAnimationUsingKeyFrames.cs
- BitmapVisualManager.cs
- CardSpaceSelector.cs
- CodeObject.cs
- ProxyAttribute.cs
- XmlCharCheckingWriter.cs
- ZipIOCentralDirectoryBlock.cs
- ConfigXmlText.cs
- DnsElement.cs
- WebPartsPersonalizationAuthorization.cs
- XXXOnTypeBuilderInstantiation.cs
- PageOutputColor.cs
- Debug.cs
- EventMap.cs
- RoleManagerSection.cs
- ToolStripContainerDesigner.cs
- X509CertificateStore.cs
- GridViewAutomationPeer.cs
- initElementDictionary.cs
- BitmapImage.cs
- FontWeightConverter.cs
- WorkflowElementDialog.cs
- HotSpotCollection.cs
- RuleSettingsCollection.cs
- ReadOnlyAttribute.cs