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
- FactoryGenerator.cs
- ReadOnlyPropertyMetadata.cs
- Matrix3D.cs
- HandlerMappingMemo.cs
- QuadTree.cs
- sitestring.cs
- RuntimeArgumentHandle.cs
- EncoderNLS.cs
- WSSecurityPolicy12.cs
- PartManifestEntry.cs
- PageSetupDialog.cs
- ThrowHelper.cs
- _IPv4Address.cs
- CompiledQueryCacheEntry.cs
- OdbcException.cs
- SpotLight.cs
- PageWrapper.cs
- DefaultHttpHandler.cs
- ScanQueryOperator.cs
- SecurityPolicySection.cs
- UnsafeNativeMethods.cs
- PeerCustomResolverSettings.cs
- InternalException.cs
- SafeCloseHandleCritical.cs
- CodeCompileUnit.cs
- NavigationProgressEventArgs.cs
- TraceFilter.cs
- StrokeCollectionDefaultValueFactory.cs
- WebRequestModulesSection.cs
- CodeMethodInvokeExpression.cs
- WindowsSolidBrush.cs
- ResXResourceWriter.cs
- TextBoxRenderer.cs
- ProfileService.cs
- PeerChannelFactory.cs
- TimeoutHelper.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- Token.cs
- ObjectParameter.cs
- InstanceDataCollection.cs
- rsa.cs
- HttpServerVarsCollection.cs
- ToolboxBitmapAttribute.cs
- DecoderReplacementFallback.cs
- oledbconnectionstring.cs
- PersonalizationStateQuery.cs
- WmiEventSink.cs
- FrameworkObject.cs
- RestHandler.cs
- XsltSettings.cs
- DataColumnCollection.cs
- SizeKeyFrameCollection.cs
- TripleDESCryptoServiceProvider.cs
- NumberFormatInfo.cs
- ContainerUIElement3D.cs
- PropertyManager.cs
- SolidBrush.cs
- BitHelper.cs
- TemplateField.cs
- DrawingContextWalker.cs
- HtmlInputButton.cs
- TypeConstant.cs
- Fault.cs
- ExpressionList.cs
- PropertyMappingExceptionEventArgs.cs
- DisplayToken.cs
- querybuilder.cs
- TypedElement.cs
- DocumentReferenceCollection.cs
- BindingListCollectionView.cs
- ByteAnimationUsingKeyFrames.cs
- OleDbInfoMessageEvent.cs
- WmlLabelAdapter.cs
- CursorConverter.cs
- StringPropertyBuilder.cs
- CompiledQueryCacheKey.cs
- EventLogInformation.cs
- DataFormat.cs
- NonVisualControlAttribute.cs
- CommandID.cs
- EnvelopedPkcs7.cs
- DBSqlParserTable.cs
- SessionIDManager.cs
- precedingquery.cs
- VirtualPath.cs
- LinkAreaEditor.cs
- SubstitutionList.cs
- VisualStateChangedEventArgs.cs
- RowsCopiedEventArgs.cs
- TemplateEditingVerb.cs
- FileUpload.cs
- RegexCharClass.cs
- DataGridTextBox.cs
- LogLogRecord.cs
- SelectionPattern.cs
- SafeNativeMethods.cs
- CrossContextChannel.cs
- QilTernary.cs
- EmptyReadOnlyDictionaryInternal.cs
- ContextStack.cs