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
- OletxDependentTransaction.cs
- SettingsPropertyWrongTypeException.cs
- TypeInitializationException.cs
- CodePropertyReferenceExpression.cs
- XPathException.cs
- TokenBasedSet.cs
- MethodCallTranslator.cs
- PersonalizableAttribute.cs
- ListViewTableRow.cs
- CodeExporter.cs
- Camera.cs
- GenericWebPart.cs
- FixedSOMLineCollection.cs
- DmlSqlGenerator.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- User.cs
- QueryLifecycle.cs
- HyperLinkField.cs
- SqlDataSourceSelectingEventArgs.cs
- ConfigXmlSignificantWhitespace.cs
- ContainerAction.cs
- Int32.cs
- AlgoModule.cs
- SHA384Managed.cs
- CompilationUnit.cs
- SendKeys.cs
- BrowserDefinitionCollection.cs
- DataGridViewComboBoxColumnDesigner.cs
- FullTextBreakpoint.cs
- ValueType.cs
- Int32AnimationUsingKeyFrames.cs
- ActivityScheduledQuery.cs
- FunctionCommandText.cs
- XsltContext.cs
- QueryOptionExpression.cs
- AnnotationDocumentPaginator.cs
- RunWorkerCompletedEventArgs.cs
- AsyncStreamReader.cs
- StatusBarAutomationPeer.cs
- TabItemWrapperAutomationPeer.cs
- Line.cs
- SystemColors.cs
- PersonalizationProviderHelper.cs
- WindowsSysHeader.cs
- CodeRemoveEventStatement.cs
- AutoGeneratedFieldProperties.cs
- ProxySimple.cs
- DataListItem.cs
- LogManagementAsyncResult.cs
- AdditionalEntityFunctions.cs
- InvokeMethod.cs
- TransportChannelListener.cs
- AndMessageFilterTable.cs
- ECDiffieHellmanPublicKey.cs
- SqlDelegatedTransaction.cs
- InnerItemCollectionView.cs
- Function.cs
- XmlSchemaObjectTable.cs
- CompModSwitches.cs
- DelegateBodyWriter.cs
- ButtonFieldBase.cs
- VariantWrapper.cs
- DispatcherExceptionEventArgs.cs
- TypeNameConverter.cs
- DSACryptoServiceProvider.cs
- SQLBoolean.cs
- Label.cs
- IsolatedStorage.cs
- Rule.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- SqlInfoMessageEvent.cs
- RemoteWebConfigurationHostStream.cs
- TaiwanLunisolarCalendar.cs
- NullableFloatAverageAggregationOperator.cs
- CodeTypeConstructor.cs
- CompositeDataBoundControl.cs
- SafeRsaProviderHandle.cs
- DesignTimeDataBinding.cs
- DataGrid.cs
- SoapElementAttribute.cs
- SoapServerMethod.cs
- CssTextWriter.cs
- basecomparevalidator.cs
- unsafenativemethodsother.cs
- XmlReflectionMember.cs
- DbConvert.cs
- ItemAutomationPeer.cs
- CompiledRegexRunner.cs
- XmlSerializationWriter.cs
- XmlStringTable.cs
- UnsafeNativeMethods.cs
- AmbientValueAttribute.cs
- IndexedString.cs
- Normalizer.cs
- UserControlParser.cs
- CommandManager.cs
- StateDesigner.Layouts.cs
- TextEditorCharacters.cs
- PassportAuthenticationEventArgs.cs
- Helpers.cs