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
- QuotedStringWriteStateInfo.cs
- ImmComposition.cs
- EditBehavior.cs
- ListParaClient.cs
- RegexWriter.cs
- Accessible.cs
- ParentControlDesigner.cs
- Regex.cs
- PageThemeParser.cs
- ControlSerializer.cs
- ProbeRequestResponseAsyncResult.cs
- ActivityScheduledQuery.cs
- RemotingException.cs
- SelectionProcessor.cs
- SizeKeyFrameCollection.cs
- ListViewInsertionMark.cs
- BinaryFormatter.cs
- Nodes.cs
- ThreadExceptionEvent.cs
- CrossSiteScriptingValidation.cs
- DiagnosticSection.cs
- IisTraceWebEventProvider.cs
- DataRecordObjectView.cs
- Section.cs
- EntitySetBaseCollection.cs
- UntypedNullExpression.cs
- GroupQuery.cs
- HttpCachePolicyWrapper.cs
- ProcessHostFactoryHelper.cs
- RowTypeElement.cs
- ActivationServices.cs
- DataQuery.cs
- SharedUtils.cs
- ConfigurationException.cs
- PointCollectionConverter.cs
- MetafileHeader.cs
- ListManagerBindingsCollection.cs
- AsyncResult.cs
- DynamicQueryableWrapper.cs
- DataGridAddNewRow.cs
- DataGridViewDataConnection.cs
- ConfigXmlAttribute.cs
- PtsPage.cs
- ListViewSelectEventArgs.cs
- ReaderWriterLock.cs
- SamlNameIdentifierClaimResource.cs
- CacheMode.cs
- SharedPersonalizationStateInfo.cs
- Function.cs
- RenderData.cs
- ObjectStateFormatter.cs
- SqlGenericUtil.cs
- InfoCardSymmetricCrypto.cs
- Assert.cs
- panel.cs
- safemediahandle.cs
- DynamicResourceExtension.cs
- WebPartEditorCancelVerb.cs
- SerializationInfoEnumerator.cs
- FormViewPagerRow.cs
- StatusBar.cs
- ExpressionHelper.cs
- BrowserDefinition.cs
- SafeSerializationManager.cs
- CharUnicodeInfo.cs
- WebReferencesBuildProvider.cs
- WindowsAuthenticationEventArgs.cs
- KnownColorTable.cs
- DataGridViewRowsRemovedEventArgs.cs
- MeasureData.cs
- JsonByteArrayDataContract.cs
- TreeNodeBinding.cs
- FileLevelControlBuilderAttribute.cs
- CodeDirectoryCompiler.cs
- ClientSession.cs
- SchemaCompiler.cs
- thaishape.cs
- Rect3D.cs
- NameValueSectionHandler.cs
- IEnumerable.cs
- EditingCoordinator.cs
- AuthenticationSection.cs
- FilePrompt.cs
- ToolStripCollectionEditor.cs
- Unit.cs
- CompiledXpathExpr.cs
- TranslateTransform3D.cs
- Model3DCollection.cs
- FrugalList.cs
- ImageFormat.cs
- VisualBasicSettings.cs
- SafeNativeMethods.cs
- GridSplitterAutomationPeer.cs
- DialogResultConverter.cs
- XhtmlConformanceSection.cs
- ApplicationSecurityInfo.cs
- Facet.cs
- XmlSchemaObjectCollection.cs
- Highlights.cs
- PublisherIdentityPermission.cs