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
- InstanceNameConverter.cs
- XamlReaderHelper.cs
- XmlNodeReader.cs
- UserValidatedEventArgs.cs
- MessageUtil.cs
- AssemblyResolver.cs
- PolicyManager.cs
- ApplicationTrust.cs
- SafeNativeMemoryHandle.cs
- ConsumerConnectionPoint.cs
- TemplateBindingExpression.cs
- TextBoxRenderer.cs
- BindingExpression.cs
- ColorDialog.cs
- BigInt.cs
- ExpandSegment.cs
- ISAPIWorkerRequest.cs
- Serializer.cs
- CharStorage.cs
- SharedStatics.cs
- ErrorStyle.cs
- InProcStateClientManager.cs
- KoreanLunisolarCalendar.cs
- AutoResizedEvent.cs
- XhtmlBasicLinkAdapter.cs
- ResourceAssociationSetEnd.cs
- PolyLineSegment.cs
- WinOEToolBoxItem.cs
- SqlDataSourceFilteringEventArgs.cs
- DataGridViewUtilities.cs
- EndPoint.cs
- NamespaceEmitter.cs
- SkinBuilder.cs
- ColorMap.cs
- QueryRewriter.cs
- WebServicesInteroperability.cs
- GeneralTransform3DGroup.cs
- WorkflowWebHostingModule.cs
- NameValuePermission.cs
- SqlTriggerContext.cs
- PeerName.cs
- SchemaImporterExtensionElement.cs
- ArraySortHelper.cs
- Stylus.cs
- RawStylusSystemGestureInputReport.cs
- ReadWriteSpinLock.cs
- BuildResultCache.cs
- StructuredProperty.cs
- ValueUnavailableException.cs
- EntryWrittenEventArgs.cs
- MapPathBasedVirtualPathProvider.cs
- TrackingDataItemValue.cs
- EncoderExceptionFallback.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- OdbcConnection.cs
- TrackingDataItem.cs
- basecomparevalidator.cs
- PageParserFilter.cs
- Perspective.cs
- MergeFilterQuery.cs
- TimeoutValidationAttribute.cs
- MenuRenderer.cs
- TabRenderer.cs
- infer.cs
- ScrollBar.cs
- JsonClassDataContract.cs
- StateMachineSubscription.cs
- DateTimePicker.cs
- QueryExpr.cs
- DrawingContextDrawingContextWalker.cs
- FixedTextContainer.cs
- SqlReferenceCollection.cs
- XhtmlConformanceSection.cs
- EdmRelationshipRoleAttribute.cs
- Panel.cs
- WebPartCatalogCloseVerb.cs
- MemberAccessException.cs
- ItemsPanelTemplate.cs
- ParseHttpDate.cs
- InvalidWMPVersionException.cs
- DiscoveryDocumentSerializer.cs
- ClientBuildManager.cs
- SamlAuthorityBinding.cs
- Track.cs
- ByteStack.cs
- ParameterModifier.cs
- x509store.cs
- _SslStream.cs
- TypeConverterHelper.cs
- SamlAudienceRestrictionCondition.cs
- PropertyEmitterBase.cs
- XmlComment.cs
- Odbc32.cs
- SecurityTokenValidationException.cs
- DrawingCollection.cs
- GroupLabel.cs
- EncryptionUtility.cs
- DocumentSequence.cs
- DeviceSpecificDesigner.cs
- AspNetSynchronizationContext.cs