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
- ManagementNamedValueCollection.cs
- AutomationEventArgs.cs
- DefaultEvaluationContext.cs
- StatusBarPanelClickEvent.cs
- CodeEntryPointMethod.cs
- XhtmlBasicFormAdapter.cs
- XmlFormatExtensionPrefixAttribute.cs
- HandlerElement.cs
- HtmlContainerControl.cs
- NamespaceList.cs
- Accessible.cs
- PrePrepareMethodAttribute.cs
- WebSysDisplayNameAttribute.cs
- XmlSortKeyAccumulator.cs
- BitmapEffectDrawingContextState.cs
- SerializationStore.cs
- unitconverter.cs
- DelegatedStream.cs
- EnumMember.cs
- AssociationEndMember.cs
- ToolStripContentPanelRenderEventArgs.cs
- ConstructorBuilder.cs
- BidirectionalDictionary.cs
- _LoggingObject.cs
- hwndwrapper.cs
- JpegBitmapDecoder.cs
- DictionaryBase.cs
- ToolStripDropDownDesigner.cs
- ProviderUtil.cs
- UnauthorizedWebPart.cs
- ToolBarButtonClickEvent.cs
- GeneralTransformCollection.cs
- TemplateControlParser.cs
- Oid.cs
- FrameworkElement.cs
- Compiler.cs
- DataFormats.cs
- TypedTableBaseExtensions.cs
- TextEditorMouse.cs
- SqlSelectStatement.cs
- Buffer.cs
- Rect3D.cs
- CompModHelpers.cs
- CrossContextChannel.cs
- MenuItem.cs
- RegistrationServices.cs
- LingerOption.cs
- PropertySegmentSerializationProvider.cs
- Identity.cs
- MethodBuilderInstantiation.cs
- GenericAuthenticationEventArgs.cs
- XmlLangPropertyAttribute.cs
- ByteConverter.cs
- DefaultBinder.cs
- HMACSHA512.cs
- RepeaterCommandEventArgs.cs
- MembershipUser.cs
- TraceSection.cs
- TextDecorationLocationValidation.cs
- DataTableReaderListener.cs
- WindowsFormsSectionHandler.cs
- MetadataArtifactLoader.cs
- Int64.cs
- BoundField.cs
- BlurEffect.cs
- DataGridBoolColumn.cs
- ImageConverter.cs
- StyleReferenceConverter.cs
- DataGridViewColumnConverter.cs
- SiteMapNode.cs
- WebPartDisplayMode.cs
- BuildProvidersCompiler.cs
- CalendarKeyboardHelper.cs
- PixelFormat.cs
- SessionSwitchEventArgs.cs
- SingleStorage.cs
- FilterQueryOptionExpression.cs
- StreamInfo.cs
- DefaultTypeArgumentAttribute.cs
- CompilerTypeWithParams.cs
- SqlWorkflowPersistenceService.cs
- Parameter.cs
- ValidationError.cs
- ImageConverter.cs
- LogExtent.cs
- PluralizationServiceUtil.cs
- SqlUserDefinedTypeAttribute.cs
- Calendar.cs
- DataTableCollection.cs
- UnsafeNativeMethods.cs
- ResourceReferenceExpressionConverter.cs
- ColorConverter.cs
- DBPropSet.cs
- ProcessHost.cs
- XpsInterleavingPolicy.cs
- SystemTcpStatistics.cs
- DataGridViewSelectedColumnCollection.cs
- TargetException.cs
- WindowExtensionMethods.cs
- DesignTimeVisibleAttribute.cs