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
- SerializerWriterEventHandlers.cs
- Lasso.cs
- XmlnsDefinitionAttribute.cs
- NativeMethods.cs
- SafeNativeMethods.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- StringHelper.cs
- JournalNavigationScope.cs
- HttpGetServerProtocol.cs
- Int64Storage.cs
- XmlBinaryReader.cs
- Pool.cs
- FrameworkContentElement.cs
- _SecureChannel.cs
- ScalarRestriction.cs
- XmlDictionaryReader.cs
- MinimizableAttributeTypeConverter.cs
- PanelStyle.cs
- EntityDataSourceStatementEditorForm.cs
- EdmItemCollection.OcAssemblyCache.cs
- OdbcCommand.cs
- TypeExtension.cs
- ListViewUpdateEventArgs.cs
- ExtenderProvidedPropertyAttribute.cs
- LineServicesCallbacks.cs
- RuntimeArgumentHandle.cs
- CodeBinaryOperatorExpression.cs
- HitTestWithPointDrawingContextWalker.cs
- PermissionSetEnumerator.cs
- RangeValidator.cs
- HttpFileCollection.cs
- ShaperBuffers.cs
- SamlSubjectStatement.cs
- ObjectDataSourceChooseTypePanel.cs
- TextEffect.cs
- DispatcherSynchronizationContext.cs
- BitmapEffectInput.cs
- UnauthorizedAccessException.cs
- XmlCompatibilityReader.cs
- WorkflowTransactionOptions.cs
- XsltException.cs
- Int32CAMarshaler.cs
- WindowsRebar.cs
- PageContent.cs
- DataFormats.cs
- XmlNavigatorFilter.cs
- LZCodec.cs
- WarningException.cs
- FilteredReadOnlyMetadataCollection.cs
- OdbcConnectionString.cs
- ListViewItemMouseHoverEvent.cs
- DeadLetterQueue.cs
- HtmlInputSubmit.cs
- ProtocolViolationException.cs
- DependencyPropertyValueSerializer.cs
- OleDbCommand.cs
- MemoryMappedViewStream.cs
- SafeLocalMemHandle.cs
- PartitionResolver.cs
- EnumDataContract.cs
- DataServiceQueryProvider.cs
- EventDescriptor.cs
- PrePostDescendentsWalker.cs
- Underline.cs
- SharedPerformanceCounter.cs
- GcHandle.cs
- ModelTypeConverter.cs
- XPathAncestorQuery.cs
- MulticastNotSupportedException.cs
- SafeNativeMethodsOther.cs
- MonthChangedEventArgs.cs
- SafeThreadHandle.cs
- SignedXml.cs
- EventProviderClassic.cs
- XmlDocumentFieldSchema.cs
- DataConnectionHelper.cs
- AnnotationStore.cs
- ComponentDispatcherThread.cs
- RepeaterItemEventArgs.cs
- RowSpanVector.cs
- ColumnHeaderConverter.cs
- CustomWebEventKey.cs
- ApplicationId.cs
- HttpListenerTimeoutManager.cs
- LocalizationParserHooks.cs
- TableLayoutSettingsTypeConverter.cs
- PropertyMapper.cs
- ScriptResourceInfo.cs
- SortDescriptionCollection.cs
- Light.cs
- SQLGuidStorage.cs
- Range.cs
- MbpInfo.cs
- SyndicationDeserializer.cs
- SiteOfOriginContainer.cs
- SqlBulkCopyColumnMappingCollection.cs
- XamlWriter.cs
- ExpressionVisitorHelpers.cs
- SpellerHighlightLayer.cs
- XmlSchemaObject.cs