Code:
/ DotNET / DotNET / 8.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
- BackgroundFormatInfo.cs
- CngProperty.cs
- NullNotAllowedCollection.cs
- BindingNavigatorDesigner.cs
- HwndStylusInputProvider.cs
- GeneralTransform3DCollection.cs
- ListSourceHelper.cs
- WebPartDisplayModeCancelEventArgs.cs
- ThemeDictionaryExtension.cs
- GenericsInstances.cs
- FocusChangedEventArgs.cs
- BufferModeSettings.cs
- AjaxFrameworkAssemblyAttribute.cs
- HostingEnvironmentException.cs
- odbcmetadatafactory.cs
- RotateTransform.cs
- SystemIPv6InterfaceProperties.cs
- EmptyStringExpandableObjectConverter.cs
- _DigestClient.cs
- AspNetHostingPermission.cs
- ClientTarget.cs
- PageFunction.cs
- CompilerParameters.cs
- BroadcastEventHelper.cs
- SQLResource.cs
- CopyOfAction.cs
- PerformanceCounterPermissionAttribute.cs
- xmlfixedPageInfo.cs
- _emptywebproxy.cs
- GlyphCache.cs
- EntityDescriptor.cs
- ReflectionPermission.cs
- LinqDataSourceContextData.cs
- Random.cs
- ELinqQueryState.cs
- XPathNodeIterator.cs
- EdmError.cs
- HostedElements.cs
- ContainerFilterService.cs
- SafeNativeMethods.cs
- SafeReversePInvokeHandle.cs
- QilExpression.cs
- GPPOINTF.cs
- XmlEnumAttribute.cs
- ManipulationVelocities.cs
- CodeCastExpression.cs
- OdbcConnectionPoolProviderInfo.cs
- ExecutionContext.cs
- AuthenticationSection.cs
- ECDiffieHellmanPublicKey.cs
- HTTPNotFoundHandler.cs
- XpsStructure.cs
- Executor.cs
- DesignerSerializationVisibilityAttribute.cs
- FixedTextSelectionProcessor.cs
- ElementUtil.cs
- XmlElementList.cs
- UserMapPath.cs
- CapabilitiesRule.cs
- ProtocolElement.cs
- Marshal.cs
- Choices.cs
- InternalBase.cs
- Int32AnimationUsingKeyFrames.cs
- Soap.cs
- InheritablePropertyChangeInfo.cs
- ToolStrip.cs
- dbenumerator.cs
- XmlILModule.cs
- SecureStringHasher.cs
- FileDialog_Vista_Interop.cs
- ToolStripTemplateNode.cs
- ToolBarOverflowPanel.cs
- SerializationEventsCache.cs
- FontCacheUtil.cs
- OpCodes.cs
- CustomError.cs
- DispatcherEventArgs.cs
- CustomBindingElementCollection.cs
- AuthenticatingEventArgs.cs
- TrackingDataItemValue.cs
- CompressedStack.cs
- XNameTypeConverter.cs
- CodeSnippetStatement.cs
- RuntimeConfigurationRecord.cs
- validationstate.cs
- RegexParser.cs
- TickBar.cs
- NegationPusher.cs
- WindowsEditBox.cs
- contentDescriptor.cs
- SudsParser.cs
- SettingsSection.cs
- DataGridColumnReorderingEventArgs.cs
- Span.cs
- XPathScanner.cs
- PrivilegedConfigurationManager.cs
- _Connection.cs
- DisplayMemberTemplateSelector.cs
- Site.cs