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
- SqlCacheDependencySection.cs
- Graphics.cs
- ProcessInfo.cs
- TextStore.cs
- Repeater.cs
- XmlSequenceWriter.cs
- CompositionAdorner.cs
- PerformanceCounterLib.cs
- ObfuscateAssemblyAttribute.cs
- Odbc32.cs
- CodePrimitiveExpression.cs
- Exceptions.cs
- XmlQualifiedName.cs
- FlowDocumentReader.cs
- XmlHierarchicalEnumerable.cs
- MediaPlayerState.cs
- PasswordBox.cs
- HttpModule.cs
- WebBrowserUriTypeConverter.cs
- ListItemsCollectionEditor.cs
- ZoneButton.cs
- WorkflowWebService.cs
- CompositeDataBoundControl.cs
- DataTrigger.cs
- MissingMethodException.cs
- XmlAttributeProperties.cs
- __ConsoleStream.cs
- OptimizerPatterns.cs
- AutomationElementCollection.cs
- Int64Storage.cs
- XamlSerializerUtil.cs
- WeakHashtable.cs
- DocumentViewerAutomationPeer.cs
- ScriptResourceAttribute.cs
- WebPartEventArgs.cs
- PerformanceCounterManager.cs
- MimeMultiPart.cs
- OleDbStruct.cs
- RPIdentityRequirement.cs
- DataGridViewLinkCell.cs
- IApplicationTrustManager.cs
- StylusButtonEventArgs.cs
- SHA384.cs
- TypeInitializationException.cs
- ErrorEventArgs.cs
- UIElementParaClient.cs
- FontDialog.cs
- ImmComposition.cs
- OpenFileDialog.cs
- TdsParserStaticMethods.cs
- ValueOfAction.cs
- GroupBox.cs
- PageThemeBuildProvider.cs
- FirstMatchCodeGroup.cs
- WindowVisualStateTracker.cs
- EpmSyndicationContentSerializer.cs
- BindingSourceDesigner.cs
- TextSerializer.cs
- DynamicDocumentPaginator.cs
- WebPartCatalogAddVerb.cs
- SiteIdentityPermission.cs
- BoundingRectTracker.cs
- ModelPropertyCollectionImpl.cs
- MILUtilities.cs
- OutputWindow.cs
- SchemaObjectWriter.cs
- DetailsViewInsertEventArgs.cs
- UdpContractFilterBehavior.cs
- TypeDelegator.cs
- TransferMode.cs
- SessionEndedEventArgs.cs
- DataSourceXmlSerializationAttribute.cs
- XamlFxTrace.cs
- HttpWebRequest.cs
- XmlDictionaryReaderQuotasElement.cs
- ReflectPropertyDescriptor.cs
- MatrixAnimationBase.cs
- ReadWriteObjectLock.cs
- SizeConverter.cs
- Point3DValueSerializer.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- DynamicAttribute.cs
- GridViewPageEventArgs.cs
- RemoteWebConfigurationHostStream.cs
- HtmlElement.cs
- XmlSchemaChoice.cs
- RelationshipNavigation.cs
- RegexCharClass.cs
- DataGridLinkButton.cs
- IncrementalCompileAnalyzer.cs
- embossbitmapeffect.cs
- AssemblyCache.cs
- HandlerBase.cs
- Formatter.cs
- TableRowCollection.cs
- RuntimeHelpers.cs
- XmlSerializer.cs
- Types.cs
- ToolboxItemAttribute.cs
- SoapEnumAttribute.cs