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
- ThicknessConverter.cs
- ParentQuery.cs
- ProcessHostConfigUtils.cs
- TimeSpanConverter.cs
- DictionaryBase.cs
- AttributeEmitter.cs
- SizeConverter.cs
- MemoryFailPoint.cs
- EntityDataSourceViewSchema.cs
- EventLog.cs
- VirtualizedContainerService.cs
- InlinedAggregationOperatorEnumerator.cs
- Model3DCollection.cs
- ToolBarButton.cs
- CopyAction.cs
- OpCodes.cs
- CombinedGeometry.cs
- ProfileGroupSettings.cs
- NullPackagingPolicy.cs
- Stack.cs
- RestClientProxyHandler.cs
- Rfc2898DeriveBytes.cs
- XPathEmptyIterator.cs
- ViewStateChangedEventArgs.cs
- StreamGeometryContext.cs
- EtwProvider.cs
- RIPEMD160Managed.cs
- TextWriter.cs
- LinkLabel.cs
- CmsUtils.cs
- MessageBox.cs
- LambdaCompiler.Statements.cs
- ServicePoint.cs
- LabelEditEvent.cs
- CanonicalFontFamilyReference.cs
- NegotiationTokenAuthenticatorStateCache.cs
- SwitchElementsCollection.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- RawKeyboardInputReport.cs
- CompiledQueryCacheEntry.cs
- LazyTextWriterCreator.cs
- IndexedEnumerable.cs
- TableLayoutStyle.cs
- XmlSchemaComplexContentRestriction.cs
- DES.cs
- OrthographicCamera.cs
- DataGridAddNewRow.cs
- NumericUpDownAccelerationCollection.cs
- ExpressionWriter.cs
- Documentation.cs
- HwndSource.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- XsdCachingReader.cs
- MsmqIntegrationElement.cs
- QilValidationVisitor.cs
- WebUtility.cs
- ExpressionCopier.cs
- ColumnClickEvent.cs
- _SslSessionsCache.cs
- LineSegment.cs
- UIPermission.cs
- MultiTrigger.cs
- FastEncoderWindow.cs
- IPCCacheManager.cs
- HttpContextBase.cs
- SqlUserDefinedTypeAttribute.cs
- ObjectDataSourceMethodEventArgs.cs
- IxmlLineInfo.cs
- XmlCharType.cs
- OdbcConnectionHandle.cs
- Focus.cs
- ExecutionContext.cs
- EncoderBestFitFallback.cs
- ChildTable.cs
- FixedSOMImage.cs
- Sql8ConformanceChecker.cs
- ProtectedProviderSettings.cs
- Parameter.cs
- TrustManager.cs
- XmlDomTextWriter.cs
- RowToParametersTransformer.cs
- ProcessModule.cs
- Propagator.Evaluator.cs
- BindingsCollection.cs
- ProtectedConfigurationSection.cs
- JournalEntry.cs
- CommandManager.cs
- DbTransaction.cs
- SqlServices.cs
- SqlWorkflowPersistenceService.cs
- PageAdapter.cs
- OrthographicCamera.cs
- HandleCollector.cs
- documentation.cs
- ScriptReferenceEventArgs.cs
- ExtentKey.cs
- ISCIIEncoding.cs
- BitmapEffectvisualstate.cs
- DependencyObjectPropertyDescriptor.cs
- EntityDataSourceConfigureObjectContext.cs