Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Markup / Baml2006 / DeferredBinaryDeserializerExtension.cs / 1305600 / DeferredBinaryDeserializerExtension.cs
using System; using System.Collections.Generic; using System.Text; using System.Windows.Markup; using System.IO; using System.Windows.Media; using MS.Internal; using System.Windows.Media.Media3D; using System.ComponentModel; namespace System.Windows.Baml2006 { internal class DeferredBinaryDeserializerExtension : MarkupExtension { private IFreezeFreezables _freezer; private bool _canFreeze; private readonly BinaryReader _reader; private readonly Stream _stream; private readonly int _converterId; public DeferredBinaryDeserializerExtension(IFreezeFreezables freezer, BinaryReader reader, int converterId, int dataByteSize) { _freezer = freezer; // We need to evaluate this immediately since ProvideValue may be called much later. _canFreeze = freezer.FreezeFreezables; byte[] bytes = reader.ReadBytes(dataByteSize); _stream = new MemoryStream(bytes); _reader = new BinaryReader(_stream); _converterId = converterId; } public override object ProvideValue(IServiceProvider serviceProvider) { _stream.Position = 0; switch (_converterId) { case Baml2006SchemaContext.KnownTypes.XamlBrushSerializer: return System.Windows.Media.SolidColorBrush.DeserializeFrom(_reader, new DeferredBinaryDeserializerExtensionContext(serviceProvider, _freezer, _canFreeze)); case Baml2006SchemaContext.KnownTypes.XamlPathDataSerializer: return Parsers.DeserializeStreamGeometry(_reader); case Baml2006SchemaContext.KnownTypes.XamlPoint3DCollectionSerializer: return Point3DCollection.DeserializeFrom(_reader); case Baml2006SchemaContext.KnownTypes.XamlPointCollectionSerializer: return PointCollection.DeserializeFrom(_reader); case Baml2006SchemaContext.KnownTypes.XamlVector3DCollectionSerializer: return Vector3DCollection.DeserializeFrom(_reader); default: throw new NotImplementedException(); } } private class DeferredBinaryDeserializerExtensionContext : ITypeDescriptorContext, IFreezeFreezables { private IServiceProvider _serviceProvider; private IFreezeFreezables _freezer; private bool _canFreeze; public DeferredBinaryDeserializerExtensionContext(IServiceProvider serviceProvider, IFreezeFreezables freezer, bool canFreeze) { _freezer = freezer; _canFreeze = canFreeze; _serviceProvider = serviceProvider; } object IServiceProvider.GetService(Type serviceType) { if (serviceType == typeof(IFreezeFreezables)) { return this; } return _serviceProvider.GetService(serviceType); } #region ITypeDescriptorContext Methods // ITypeDescriptorContext derives from IServiceProvider. void ITypeDescriptorContext.OnComponentChanged() { } bool ITypeDescriptorContext.OnComponentChanging() { return false; } IContainer ITypeDescriptorContext.Container { get { return null; } } object ITypeDescriptorContext.Instance { get { return null; } } PropertyDescriptor ITypeDescriptorContext.PropertyDescriptor { get { return null; } } #endregion #region IFreezeFreezables Members bool IFreezeFreezables.FreezeFreezables { get { return _canFreeze; } } bool IFreezeFreezables.TryFreeze(string value, Freezable freezable) { return _freezer.TryFreeze(value, freezable); } Freezable IFreezeFreezables.TryGetFreezable(string value) { return _freezer.TryGetFreezable(value); } #endregion } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections.Generic; using System.Text; using System.Windows.Markup; using System.IO; using System.Windows.Media; using MS.Internal; using System.Windows.Media.Media3D; using System.ComponentModel; namespace System.Windows.Baml2006 { internal class DeferredBinaryDeserializerExtension : MarkupExtension { private IFreezeFreezables _freezer; private bool _canFreeze; private readonly BinaryReader _reader; private readonly Stream _stream; private readonly int _converterId; public DeferredBinaryDeserializerExtension(IFreezeFreezables freezer, BinaryReader reader, int converterId, int dataByteSize) { _freezer = freezer; // We need to evaluate this immediately since ProvideValue may be called much later. _canFreeze = freezer.FreezeFreezables; byte[] bytes = reader.ReadBytes(dataByteSize); _stream = new MemoryStream(bytes); _reader = new BinaryReader(_stream); _converterId = converterId; } public override object ProvideValue(IServiceProvider serviceProvider) { _stream.Position = 0; switch (_converterId) { case Baml2006SchemaContext.KnownTypes.XamlBrushSerializer: return System.Windows.Media.SolidColorBrush.DeserializeFrom(_reader, new DeferredBinaryDeserializerExtensionContext(serviceProvider, _freezer, _canFreeze)); case Baml2006SchemaContext.KnownTypes.XamlPathDataSerializer: return Parsers.DeserializeStreamGeometry(_reader); case Baml2006SchemaContext.KnownTypes.XamlPoint3DCollectionSerializer: return Point3DCollection.DeserializeFrom(_reader); case Baml2006SchemaContext.KnownTypes.XamlPointCollectionSerializer: return PointCollection.DeserializeFrom(_reader); case Baml2006SchemaContext.KnownTypes.XamlVector3DCollectionSerializer: return Vector3DCollection.DeserializeFrom(_reader); default: throw new NotImplementedException(); } } private class DeferredBinaryDeserializerExtensionContext : ITypeDescriptorContext, IFreezeFreezables { private IServiceProvider _serviceProvider; private IFreezeFreezables _freezer; private bool _canFreeze; public DeferredBinaryDeserializerExtensionContext(IServiceProvider serviceProvider, IFreezeFreezables freezer, bool canFreeze) { _freezer = freezer; _canFreeze = canFreeze; _serviceProvider = serviceProvider; } object IServiceProvider.GetService(Type serviceType) { if (serviceType == typeof(IFreezeFreezables)) { return this; } return _serviceProvider.GetService(serviceType); } #region ITypeDescriptorContext Methods // ITypeDescriptorContext derives from IServiceProvider. void ITypeDescriptorContext.OnComponentChanged() { } bool ITypeDescriptorContext.OnComponentChanging() { return false; } IContainer ITypeDescriptorContext.Container { get { return null; } } object ITypeDescriptorContext.Instance { get { return null; } } PropertyDescriptor ITypeDescriptorContext.PropertyDescriptor { get { return null; } } #endregion #region IFreezeFreezables Members bool IFreezeFreezables.FreezeFreezables { get { return _canFreeze; } } bool IFreezeFreezables.TryFreeze(string value, Freezable freezable) { return _freezer.TryFreeze(value, freezable); } Freezable IFreezeFreezables.TryGetFreezable(string value) { return _freezer.TryGetFreezable(value); } #endregion } } } // 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
- LayoutManager.cs
- AllMembershipCondition.cs
- CmsUtils.cs
- ListViewUpdatedEventArgs.cs
- DependsOnAttribute.cs
- PathFigureCollectionValueSerializer.cs
- TextServicesCompartmentContext.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- UnknownBitmapEncoder.cs
- NotSupportedException.cs
- FrameworkPropertyMetadata.cs
- SqlIdentifier.cs
- Rfc2898DeriveBytes.cs
- TouchesCapturedWithinProperty.cs
- SafeEventLogReadHandle.cs
- UpdatePanelTrigger.cs
- ConnectorSelectionGlyph.cs
- documentsequencetextpointer.cs
- XmlNamespaceDeclarationsAttribute.cs
- SimpleHandlerBuildProvider.cs
- ModelEditingScope.cs
- EntityAdapter.cs
- XmlUtil.cs
- ApplicationBuildProvider.cs
- CompressionTransform.cs
- SQLGuidStorage.cs
- TypeLoadException.cs
- NameSpaceExtractor.cs
- BuiltInExpr.cs
- LinkClickEvent.cs
- DefaultBindingPropertyAttribute.cs
- EditorBrowsableAttribute.cs
- DataViewManagerListItemTypeDescriptor.cs
- XmlSchemaValidationException.cs
- CaseDesigner.xaml.cs
- MultiTouchSystemGestureLogic.cs
- HelpKeywordAttribute.cs
- Authorization.cs
- recordstatefactory.cs
- ProcessHost.cs
- DefaultValueConverter.cs
- FontUnit.cs
- ValidatingReaderNodeData.cs
- StylusPointProperty.cs
- PreviewKeyDownEventArgs.cs
- PrinterSettings.cs
- ClientBuildManagerCallback.cs
- ProvidePropertyAttribute.cs
- XmlSchemaObjectTable.cs
- FixedPosition.cs
- ListParagraph.cs
- DoubleUtil.cs
- Vector3dCollection.cs
- NameValueConfigurationElement.cs
- XmlCharType.cs
- OpenTypeCommon.cs
- querybuilder.cs
- CodeArrayCreateExpression.cs
- ToolStripRenderer.cs
- DSASignatureFormatter.cs
- XmlSignificantWhitespace.cs
- Decimal.cs
- GridViewColumnCollection.cs
- FrameworkTextComposition.cs
- DeferredElementTreeState.cs
- HttpPostedFile.cs
- TogglePattern.cs
- FtpWebRequest.cs
- DataColumnChangeEvent.cs
- MergablePropertyAttribute.cs
- OutputCacheSettings.cs
- EmbeddedMailObjectsCollection.cs
- ClosableStream.cs
- ConfigUtil.cs
- RenderOptions.cs
- RenderingBiasValidation.cs
- BoundColumn.cs
- BulletedListDesigner.cs
- BinaryExpression.cs
- Util.cs
- Clause.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- ImageClickEventArgs.cs
- ManagementDateTime.cs
- TabRenderer.cs
- MorphHelpers.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- LogStore.cs
- AmbientProperties.cs
- FunctionQuery.cs
- WebBrowserProgressChangedEventHandler.cs
- Label.cs
- CharacterHit.cs
- EventBuilder.cs
- ResourceDescriptionAttribute.cs
- ConfigXmlSignificantWhitespace.cs
- DispatcherEventArgs.cs
- BinaryObjectInfo.cs
- BigInt.cs
- ServiceObjectContainer.cs