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
- XmlSchemaSet.cs
- PowerStatus.cs
- StrongNameUtility.cs
- DSASignatureFormatter.cs
- IPPacketInformation.cs
- Identity.cs
- IOException.cs
- DetailsViewPagerRow.cs
- Hash.cs
- PersistenceIOParticipant.cs
- WindowsFont.cs
- UrlMappingCollection.cs
- PasswordTextNavigator.cs
- PerformanceCounterPermissionAttribute.cs
- WeakEventManager.cs
- AmbientLight.cs
- Validator.cs
- XmlWriterDelegator.cs
- SplashScreen.cs
- DesignerResources.cs
- ToolTipAutomationPeer.cs
- PointLight.cs
- ItemsControl.cs
- Function.cs
- StylusEditingBehavior.cs
- SQLBinary.cs
- SHA384CryptoServiceProvider.cs
- SafeThreadHandle.cs
- _CacheStreams.cs
- ProviderCollection.cs
- DataContext.cs
- TextEffect.cs
- FormConverter.cs
- UIElementParagraph.cs
- COAUTHIDENTITY.cs
- Canvas.cs
- InternalResources.cs
- DelegatedStream.cs
- BitmapEffectInputConnector.cs
- IsolatedStorageFile.cs
- DateTimePickerDesigner.cs
- HebrewNumber.cs
- FamilyMapCollection.cs
- CodeFieldReferenceExpression.cs
- XmlSchemaSimpleContent.cs
- ImageCodecInfo.cs
- MessageQueueAccessControlEntry.cs
- ButtonChrome.cs
- SynchronizationScope.cs
- DataSysAttribute.cs
- AudioFormatConverter.cs
- ScaleTransform3D.cs
- ModuleBuilderData.cs
- ApplicationBuildProvider.cs
- ServiceOperationParameter.cs
- DirectoryObjectSecurity.cs
- PathFigureCollectionValueSerializer.cs
- StaticExtensionConverter.cs
- SizeChangedInfo.cs
- NullableDoubleAverageAggregationOperator.cs
- BamlRecordHelper.cs
- TextTreeTextBlock.cs
- GeometryHitTestParameters.cs
- PerfCounters.cs
- ControlTemplate.cs
- COAUTHIDENTITY.cs
- OpCellTreeNode.cs
- EntityConnectionStringBuilder.cs
- SequentialOutput.cs
- ZipIOExtraFieldZip64Element.cs
- Variant.cs
- OletxDependentTransaction.cs
- NamespaceDecl.cs
- HandleCollector.cs
- DoubleAverageAggregationOperator.cs
- PreservationFileReader.cs
- CodeTypeParameterCollection.cs
- AnnotationAuthorChangedEventArgs.cs
- FontNamesConverter.cs
- Label.cs
- DataGridViewImageColumn.cs
- hebrewshape.cs
- WebPartActionVerb.cs
- CodeTypeDeclaration.cs
- FormViewUpdatedEventArgs.cs
- WindowsFormsSynchronizationContext.cs
- HttpCacheParams.cs
- Vector3dCollection.cs
- Utility.cs
- Operand.cs
- ControlValuePropertyAttribute.cs
- ServiceNotStartedException.cs
- ListBindingConverter.cs
- WebPartConnectionsDisconnectVerb.cs
- EventLogHandle.cs
- _ScatterGatherBuffers.cs
- Psha1DerivedKeyGeneratorHelper.cs
- XmlBaseReader.cs
- ByteViewer.cs
- ResolveNameEventArgs.cs