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
- CompilerState.cs
- ParallelActivityDesigner.cs
- ConfigUtil.cs
- BufferedReadStream.cs
- DataGridViewTopRowAccessibleObject.cs
- ReadonlyMessageFilter.cs
- TransformGroup.cs
- CircleHotSpot.cs
- LocationChangedEventArgs.cs
- Scheduling.cs
- VectorValueSerializer.cs
- TemplatedMailWebEventProvider.cs
- SqlConnectionString.cs
- ErrorFormatterPage.cs
- EntityDataSourceEntityTypeFilterItem.cs
- InputScopeManager.cs
- SemanticKeyElement.cs
- HostedTransportConfigurationBase.cs
- NotCondition.cs
- VectorAnimationUsingKeyFrames.cs
- FragmentQuery.cs
- TableCellCollection.cs
- TypeDelegator.cs
- ObjectItemCollection.cs
- ByValueEqualityComparer.cs
- IList.cs
- ValidationRule.cs
- CodeGenerator.cs
- ClientSettingsSection.cs
- MimeFormImporter.cs
- WinEventHandler.cs
- BoundColumn.cs
- Geometry3D.cs
- WpfGeneratedKnownTypes.cs
- Int32Storage.cs
- Assembly.cs
- XmlDeclaration.cs
- PointHitTestResult.cs
- DbParameterCollection.cs
- MessageDecoder.cs
- SoapMessage.cs
- DeferredBinaryDeserializerExtension.cs
- Storyboard.cs
- ItemsChangedEventArgs.cs
- EntityClassGenerator.cs
- SafePEFileHandle.cs
- EmptyReadOnlyDictionaryInternal.cs
- XmlObjectSerializerContext.cs
- sitestring.cs
- Container.cs
- UntrustedRecipientException.cs
- parserscommon.cs
- TagPrefixInfo.cs
- Attribute.cs
- ArrayExtension.cs
- ReceiveSecurityHeaderEntry.cs
- _DynamicWinsockMethods.cs
- xsdvalidator.cs
- ConnectionProviderAttribute.cs
- KnownBoxes.cs
- IImplicitResourceProvider.cs
- WeakReferenceKey.cs
- HostingEnvironment.cs
- SymbolPair.cs
- SqlNotificationEventArgs.cs
- QueryCursorEventArgs.cs
- HttpModuleCollection.cs
- DiscoveryInnerClientAdhocCD1.cs
- HtmlDocument.cs
- MarkedHighlightComponent.cs
- ListViewAutomationPeer.cs
- log.cs
- MetadataCache.cs
- DataGridViewMethods.cs
- VectorAnimation.cs
- AuthenticationException.cs
- _TimerThread.cs
- Object.cs
- Source.cs
- Error.cs
- TreeBuilder.cs
- RootProfilePropertySettingsCollection.cs
- CommunicationException.cs
- DesignerOptionService.cs
- SystemIPInterfaceProperties.cs
- PageClientProxyGenerator.cs
- Size3D.cs
- XmlSerializableServices.cs
- DesignerTransactionCloseEvent.cs
- TemplateBindingExtensionConverter.cs
- ParseChildrenAsPropertiesAttribute.cs
- DbProviderConfigurationHandler.cs
- SafeLibraryHandle.cs
- BuildManagerHost.cs
- OdbcParameter.cs
- ObjectStorage.cs
- FollowerQueueCreator.cs
- SqlProviderServices.cs
- SettingsSection.cs
- TemplateBindingExpressionConverter.cs