Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EntityConnectionStringBuilderItem.cs
- Intellisense.cs
- MailAddressCollection.cs
- _KerberosClient.cs
- ToolstripProfessionalRenderer.cs
- ControlAdapter.cs
- PointCollection.cs
- SID.cs
- ToolboxItemFilterAttribute.cs
- InputEventArgs.cs
- QueueNameHelper.cs
- BaseValidator.cs
- TextInfo.cs
- DbModificationClause.cs
- TCEAdapterGenerator.cs
- SymbolMethod.cs
- WebBrowserProgressChangedEventHandler.cs
- ClientConfigPaths.cs
- DefaultAuthorizationContext.cs
- XmlSchemaCompilationSettings.cs
- DataPointer.cs
- PointLight.cs
- GradientBrush.cs
- DataTableTypeConverter.cs
- RemoteX509Token.cs
- TagMapInfo.cs
- InputScopeConverter.cs
- FilterInvalidBodyAccessException.cs
- ZoomPercentageConverter.cs
- SignatureDescription.cs
- SynchronizationFilter.cs
- PrintDialog.cs
- IArgumentProvider.cs
- ScrollChrome.cs
- ApplicationContext.cs
- StackBuilderSink.cs
- WebPartConnectionsEventArgs.cs
- ElementFactory.cs
- AstTree.cs
- SessionStateModule.cs
- MetadataCollection.cs
- mediaeventshelper.cs
- ColumnHeader.cs
- ExclusiveCanonicalizationTransform.cs
- OAVariantLib.cs
- Column.cs
- PeerTransportElement.cs
- PasswordBox.cs
- WindowsTreeView.cs
- CustomBinding.cs
- PermissionSet.cs
- Queue.cs
- ConnectionManagementElement.cs
- StrokeIntersection.cs
- ActivityFunc.cs
- AdPostCacheSubstitution.cs
- WebBrowsableAttribute.cs
- EdmItemCollection.cs
- XhtmlBasicPageAdapter.cs
- DataBoundLiteralControl.cs
- SkewTransform.cs
- EditCommandColumn.cs
- InternalConfigEventArgs.cs
- InputMethod.cs
- SoapClientProtocol.cs
- ipaddressinformationcollection.cs
- CannotUnloadAppDomainException.cs
- NativeWindow.cs
- ADMembershipUser.cs
- DynamicPropertyHolder.cs
- CryptoConfig.cs
- BaseDataBoundControl.cs
- ThreadStartException.cs
- CompositeActivityValidator.cs
- SoapCodeExporter.cs
- CellPartitioner.cs
- SecurityResources.cs
- StaticDataManager.cs
- ModuleConfigurationInfo.cs
- KeyValuePairs.cs
- ConsoleCancelEventArgs.cs
- SegmentInfo.cs
- SiteMapNodeItemEventArgs.cs
- SpecularMaterial.cs
- FixedNode.cs
- _ConnectStream.cs
- NameValuePermission.cs
- MemberMaps.cs
- HtmlElement.cs
- CompilerHelpers.cs
- IgnoreFlushAndCloseStream.cs
- DBSqlParserColumnCollection.cs
- ChineseLunisolarCalendar.cs
- FunctionNode.cs
- ErrorRuntimeConfig.cs
- HMACRIPEMD160.cs
- Emitter.cs
- HTTPRemotingHandler.cs
- RemoteWebConfigurationHost.cs
- GC.cs