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
- CompModSwitches.cs
- DisplayMemberTemplateSelector.cs
- VisualStyleTypesAndProperties.cs
- TypeTypeConverter.cs
- WebPartMenuStyle.cs
- RemotingException.cs
- listitem.cs
- XmlNodeComparer.cs
- MiniAssembly.cs
- WindowsFormsHostAutomationPeer.cs
- ColorIndependentAnimationStorage.cs
- RelationshipEnd.cs
- BufferedReceiveElement.cs
- HMACSHA384.cs
- XmlBaseWriter.cs
- DependencyPropertyKind.cs
- SrgsItemList.cs
- SqlUtils.cs
- DataProtection.cs
- CheckBoxFlatAdapter.cs
- ListViewCancelEventArgs.cs
- MetadataCache.cs
- TraceSource.cs
- ProfilePropertyMetadata.cs
- SqlCacheDependencyDatabase.cs
- RadioButton.cs
- StringComparer.cs
- CorrelationManager.cs
- CheckBoxRenderer.cs
- CodeDelegateInvokeExpression.cs
- ZipIOLocalFileDataDescriptor.cs
- ResourceDefaultValueAttribute.cs
- SplitContainer.cs
- RoleManagerSection.cs
- EncryptedType.cs
- safex509handles.cs
- XPathDocumentNavigator.cs
- VisemeEventArgs.cs
- SiteMapPath.cs
- AmbientProperties.cs
- AnnotationAdorner.cs
- ClientUtils.cs
- OciEnlistContext.cs
- ButtonChrome.cs
- GradientSpreadMethodValidation.cs
- ListViewDeletedEventArgs.cs
- CommandBindingCollection.cs
- ResourceAssociationType.cs
- SiteMapDesignerDataSourceView.cs
- KeyboardEventArgs.cs
- unsafenativemethodsother.cs
- BindingManagerDataErrorEventArgs.cs
- ArgumentOutOfRangeException.cs
- basecomparevalidator.cs
- BasicSecurityProfileVersion.cs
- SelectingProviderEventArgs.cs
- OdbcDataAdapter.cs
- SelectionEditingBehavior.cs
- AttachedPropertyDescriptor.cs
- XPathEmptyIterator.cs
- ResourceReferenceExpression.cs
- ResizeGrip.cs
- RuntimeHandles.cs
- FrameworkElementFactoryMarkupObject.cs
- StylusSystemGestureEventArgs.cs
- ResXResourceWriter.cs
- PointAnimationUsingKeyFrames.cs
- BooleanAnimationBase.cs
- ReadOnlyDataSource.cs
- InertiaRotationBehavior.cs
- RenderDataDrawingContext.cs
- CodeThrowExceptionStatement.cs
- Int64.cs
- StringAnimationBase.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- XmlChildNodes.cs
- ServiceDescriptions.cs
- SolidBrush.cs
- PermissionToken.cs
- StorageEndPropertyMapping.cs
- FamilyTypeface.cs
- SelectionProcessor.cs
- TimelineClockCollection.cs
- ProcessManager.cs
- LinqDataSourceValidationException.cs
- HttpInputStream.cs
- SessionIDManager.cs
- DataBoundControlParameterTarget.cs
- OracleTimeSpan.cs
- Model3DGroup.cs
- ApplicationBuildProvider.cs
- HttpBindingExtension.cs
- Quad.cs
- Form.cs
- DifferencingCollection.cs
- HierarchicalDataBoundControlAdapter.cs
- LineServicesCallbacks.cs
- Constant.cs
- XmlComment.cs
- WorkingDirectoryEditor.cs