Code:
/ 4.0 / 4.0 / 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
- AnimatedTypeHelpers.cs
- VariableQuery.cs
- MobileFormsAuthentication.cs
- mediaeventshelper.cs
- AppDomainFactory.cs
- ReferencedType.cs
- MgmtConfigurationRecord.cs
- DataContractSerializer.cs
- AlternateViewCollection.cs
- ListBoxAutomationPeer.cs
- serverconfig.cs
- Events.cs
- AppSettingsExpressionBuilder.cs
- EntityContainer.cs
- Formatter.cs
- Slider.cs
- FamilyTypeface.cs
- LineInfo.cs
- TableItemPatternIdentifiers.cs
- StrongNameKeyPair.cs
- TaskResultSetter.cs
- PrefixQName.cs
- ExpandedWrapper.cs
- CodePageUtils.cs
- SiteMapNodeCollection.cs
- DesignOnlyAttribute.cs
- SynchronizedDispatch.cs
- _SingleItemRequestCache.cs
- DesignerDataSchemaClass.cs
- ToolStripProgressBar.cs
- EditorPartDesigner.cs
- _IPv6Address.cs
- JavascriptXmlWriterWrapper.cs
- HttpPostedFileBase.cs
- SecureEnvironment.cs
- PaintEvent.cs
- TypedReference.cs
- SynchronousChannelMergeEnumerator.cs
- ObjectListDesigner.cs
- HttpDictionary.cs
- StylusDownEventArgs.cs
- TaskFactory.cs
- ActivityTypeDesigner.xaml.cs
- ModelPropertyCollectionImpl.cs
- DataGridViewColumnConverter.cs
- MultiByteCodec.cs
- SqlErrorCollection.cs
- OdbcCommand.cs
- ObjectManager.cs
- VisualStyleElement.cs
- TaskFileService.cs
- ScriptRef.cs
- PeerCollaborationPermission.cs
- SizeIndependentAnimationStorage.cs
- NativeMethods.cs
- RootBrowserWindowProxy.cs
- PageStatePersister.cs
- DefaultHttpHandler.cs
- XamlBrushSerializer.cs
- ParseElementCollection.cs
- ToolStripComboBox.cs
- HTMLTagNameToTypeMapper.cs
- CancellationHandlerDesigner.cs
- TraceSection.cs
- LookupBindingPropertiesAttribute.cs
- GeneralTransformGroup.cs
- Calendar.cs
- ExceptionCollection.cs
- BitmapCodecInfo.cs
- HttpModulesSection.cs
- IdentityNotMappedException.cs
- SmtpMail.cs
- Int16.cs
- DataSetFieldSchema.cs
- DesignTimeVisibleAttribute.cs
- SelectionProcessor.cs
- ResourceDisplayNameAttribute.cs
- IpcClientChannel.cs
- CompositionTarget.cs
- ImportCatalogPart.cs
- QuotedPairReader.cs
- BrowserCapabilitiesCodeGenerator.cs
- SqlEnums.cs
- Pen.cs
- GetMemberBinder.cs
- QuaternionRotation3D.cs
- ImageSource.cs
- SessionMode.cs
- WebPartZoneCollection.cs
- XmlQualifiedNameTest.cs
- DocumentScope.cs
- ExceptionHandler.cs
- XmlDataLoader.cs
- SafeNativeMethodsMilCoreApi.cs
- X509ClientCertificateAuthenticationElement.cs
- UniqueEventHelper.cs
- CommandEventArgs.cs
- CodeGenerationManager.cs
- OdbcCommandBuilder.cs
- GreenMethods.cs