Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / UpdateTracker.cs / 1305376 / UpdateTracker.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Provides a class used to track updates for callbacks. // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services { using System.Collections.Generic; using System.Data.Services.Providers; using System.Diagnostics; using System.Reflection; ///Provides a class used to track updates for callbacks. internal class UpdateTracker { #region Private fields. ////// A dictionary of containers mapping to the changes on those /// containers, each of which consists of an element and the /// action taken on it. /// private Dictionary> items; /// Underlying data service instance. private IDataService service; #endregion Private fields. ///Initializes a new /// underlying data source instance. private UpdateTracker(IDataService service) { this.service = service; this.items = new Dictionaryinstance. >(ReferenceEqualityComparer .Instance); } /// Fires the notification for a single action. /// Service on which methods should be invoked. /// Object to be tracked. /// Container in which object is changed. /// Action affecting target. internal static void FireNotification(IDataService service, object target, ResourceSetWrapper container, UpdateOperations action) { Debug.Assert(service != null, "service != null"); AssertActionValues(target, container); MethodInfo[] methods = container.ChangeInterceptors; if (methods != null) { object[] parameters = new object[2]; parameters[0] = target; parameters[1] = action; for (int i = 0; i < methods.Length; i++) { try { methods[i].Invoke(service.Instance, parameters); } catch (TargetInvocationException exception) { ErrorHandler.HandleTargetInvocationException(exception); throw; } } } } ////// Create a new instance of update tracker /// /// underlying data service. ////// Returns a new instance of UpdateTracker. /// internal static UpdateTracker CreateUpdateTracker(IDataService service) { return new UpdateTracker(service); } ///Fires all notifications internal void FireNotifications() { object[] parameters = new object[2]; foreach (var item in this.items) { MethodInfo[] methods = item.Key.ChangeInterceptors; Debug.Assert(methods != null, "methods != null - should not have been tracking changes to the container otherwise."); foreach (var element in item.Value) { parameters[0] = this.service.Updatable.ResolveResource(element.Key); parameters[1] = element.Value; for (int i = 0; i < methods.Length; i++) { try { methods[i].Invoke(this.service.Instance, parameters); } catch (TargetInvocationException exception) { ErrorHandler.HandleTargetInvocationException(exception); throw; } } } // Make elements elegible for garbage collection. item.Value.Clear(); } // Make dictionary elegible for garbage collection. this.items = null; } ////// Tracks the specified /// Object to be tracked. /// Container in which object is changed. /// Action affecting target. ///for a /// given on the . /// /// If internal void TrackAction(object target, ResourceSetWrapper container, UpdateOperations action) { AssertActionValues(target, container); Debug.Assert(this.items != null, "this.items != null - otherwise FireNotification has already been called"); // If it won't be necessary for us to fire authorizatio methods, // skip tracking altogether. if (container.ChangeInterceptors == null) { return; } // Get the container for which the change has taken place. Dictionarywas already being tracked, the actions are OR'ed together. ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProjectionPathSegment.cs
- SqlFileStream.cs
- XmlCharType.cs
- WebDisplayNameAttribute.cs
- PropertiesTab.cs
- BinaryQueryOperator.cs
- StreamInfo.cs
- ControlPropertyNameConverter.cs
- GrammarBuilderWildcard.cs
- XsdCachingReader.cs
- __TransparentProxy.cs
- DbSourceCommand.cs
- TrackingExtract.cs
- TaskFormBase.cs
- DataViewSetting.cs
- ConfigurationStrings.cs
- FrameworkElementFactory.cs
- HMACMD5.cs
- ReachSerializer.cs
- _RequestCacheProtocol.cs
- BuildManager.cs
- AudioDeviceOut.cs
- XmlCharCheckingReader.cs
- ContextStaticAttribute.cs
- PropertyDescriptorCollection.cs
- LineServicesRun.cs
- PropertyValue.cs
- JsonByteArrayDataContract.cs
- Token.cs
- EnumerableWrapperWeakToStrong.cs
- DirectoryRootQuery.cs
- SafeHandles.cs
- SchemaImporterExtension.cs
- DataGridViewUtilities.cs
- XmlDocument.cs
- _TimerThread.cs
- QueueNameHelper.cs
- HeaderedContentControl.cs
- CultureInfoConverter.cs
- ParentQuery.cs
- CryptoHelper.cs
- EntityDataSourceQueryBuilder.cs
- CatalogPartChrome.cs
- CanExpandCollapseAllConverter.cs
- ProfilePropertyNameValidator.cs
- GeometryHitTestResult.cs
- Maps.cs
- ServiceObjectContainer.cs
- SemanticAnalyzer.cs
- SecurityRuntime.cs
- MailWebEventProvider.cs
- ToolStripLocationCancelEventArgs.cs
- ToolStripItemDataObject.cs
- ACL.cs
- AdCreatedEventArgs.cs
- Cursors.cs
- AttributeSetAction.cs
- ResourcesChangeInfo.cs
- XmlSchemaObjectTable.cs
- Int64AnimationBase.cs
- MembershipPasswordException.cs
- InstanceData.cs
- SerializationInfoEnumerator.cs
- __ConsoleStream.cs
- ReadWriteSpinLock.cs
- AuthenticatedStream.cs
- LocalizedNameDescriptionPair.cs
- Sorting.cs
- TableRowsCollectionEditor.cs
- PageAsyncTask.cs
- SessionPageStateSection.cs
- StorageScalarPropertyMapping.cs
- Package.cs
- String.cs
- GlobalizationAssembly.cs
- DropTarget.cs
- SkinIDTypeConverter.cs
- SerializationObjectManager.cs
- Exceptions.cs
- storepermissionattribute.cs
- DataGridViewMethods.cs
- JsonDeserializer.cs
- XmlTypeAttribute.cs
- DWriteFactory.cs
- CustomLineCap.cs
- SrgsItemList.cs
- NeutralResourcesLanguageAttribute.cs
- TextEditorTyping.cs
- Nodes.cs
- NotCondition.cs
- XmlILModule.cs
- ProviderUtil.cs
- GACIdentityPermission.cs
- MetadataUtilsSmi.cs
- DropDownList.cs
- XmlUtf8RawTextWriter.cs
- StringUtil.cs
- XmlUtil.cs
- DesignerDataRelationship.cs
- BufferedGraphics.cs