Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / TrustUi / MS / Internal / documents / Application / ChainOfDependencies.cs / 1 / ChainOfDependencies.cs
//------------------------------------------------------------------------------ //// Copyright (C) Microsoft Corporation. All rights reserved. // //// A Generic that provides user with the ability to chain dependent objects // of a shared base type and perform actions on them in order of dependency. // // // History: // 08/28/2005: [....]: Initial implementation. //----------------------------------------------------------------------------- namespace MS.Internal.Documents.Application { ////// A Generic that provides user with the ability to chain dependent objects /// of a shared base type and perform actions on them in order of dependency. /// ////// This is different from the chain of responsiblity in the following ways: /// /// - Order of execution in the chain can be inversed by calling LastToFirst. /// - The same operation is performed on each member once. /// /// This class has many methods which are intentionaly recursive. There is /// currently no validation to prevent cyclic dependencies. As the chain is /// currently fixed at compile time there is no need; StackOverFlowException /// durring testing is fine. /// ///A type common to all in the chain. internal static class ChainOfDependencieswhere T : IChainOfDependenciesNode { #region Internal Methods //------------------------------------------------------------------------- // Internal Methods //------------------------------------------------------------------------- /// /// Gets the last member in the chain. (The one with no dependencies.) /// /// The current member. ///The last member in the chain. (The one with no dependencies.) /// internal static T GetLast(T member) { T last = member; if (member.Dependency != null) { last = GetLast(member.Dependency); } return last; } ////// Will perform the action from the member with no dependencies to the most /// dependent member. /// /// The member on which to perform the action. /// The action to perform on the member. ///Returns true if all the actions returned true. internal static bool OrderByLeastDependent( T member, ChainOfDependencies.Action action) { bool satisfied = true; T nextInChain = member.Dependency; if (nextInChain != null) { satisfied = OrderByLeastDependent(nextInChain, action); } if (satisfied) { satisfied = action(member); } else { Trace.SafeWrite( Trace.File, "Dependency for {0}#{1} was not satisfied skipping action.", member.GetType(), member.GetHashCode()); } return satisfied; } /// /// Will perform the action from most dependent to not dependent. /// /// The member on which to perform the action. /// The action to perform on the member. ///Returns true if the all the actions returned true. internal static bool OrderByMostDependent( T member, ChainOfDependencies.Action action) { bool satisfied = action(member); T nextInChain = member.Dependency; if (satisfied) { if (nextInChain != null) { satisfied = OrderByMostDependent(nextInChain, action); } } else { Trace.SafeWrite( Trace.File, "Dependency for {0}#{1} was not satisfied skipping action.", member.GetType(), member.GetHashCode()); } return satisfied; } #endregion Internal Methods #region Internal Delegates //-------------------------------------------------------------------------- // Internal Delegates //------------------------------------------------------------------------- /// /// An action to perform on a ChainOfDependencies member. /// /// The member on which to perform the action. ///True if the dependency was satisfied. internal delegate bool Action(T member); #endregion Internal Delegates } } // 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
- SamlNameIdentifierClaimResource.cs
- FixedSOMPage.cs
- Frame.cs
- URI.cs
- HttpWrapper.cs
- FontEmbeddingManager.cs
- DataAdapter.cs
- WebPartRestoreVerb.cs
- PipelineComponent.cs
- CheckBoxField.cs
- QuadraticBezierSegment.cs
- ProxyGenerationError.cs
- TreeNode.cs
- WmfPlaceableFileHeader.cs
- SecurityPolicyVersion.cs
- PingOptions.cs
- ListViewInsertEventArgs.cs
- ToolStripContainerActionList.cs
- IfJoinedCondition.cs
- ClonableStack.cs
- SingleResultAttribute.cs
- ForwardPositionQuery.cs
- SeekableReadStream.cs
- DataGridViewRowCollection.cs
- BinaryObjectInfo.cs
- PointHitTestParameters.cs
- PluralizationServiceUtil.cs
- GuidelineSet.cs
- EntitySqlException.cs
- ElementHostPropertyMap.cs
- InputProcessorProfiles.cs
- PropertySourceInfo.cs
- GeometryConverter.cs
- ColumnWidthChangingEvent.cs
- JournalNavigationScope.cs
- Fonts.cs
- ZipIOLocalFileHeader.cs
- Activity.cs
- TableColumnCollectionInternal.cs
- Subset.cs
- InitializerFacet.cs
- _SslState.cs
- Label.cs
- XmlSchemaCollection.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- CommandID.cs
- StopStoryboard.cs
- SafeNativeMethods.cs
- TcpClientCredentialType.cs
- CreateSequence.cs
- KeyGesture.cs
- ContentFilePart.cs
- CodeIterationStatement.cs
- CompModSwitches.cs
- DebugTrace.cs
- DetailsViewDeletedEventArgs.cs
- LineSegment.cs
- __TransparentProxy.cs
- ColorIndependentAnimationStorage.cs
- WindowsScrollBarBits.cs
- IdentifierCollection.cs
- TreeNode.cs
- RadioButton.cs
- CommonGetThemePartSize.cs
- CodeTypeParameter.cs
- WebGetAttribute.cs
- XmlSecureResolver.cs
- ImageDrawing.cs
- PeerInvitationResponse.cs
- ResXResourceWriter.cs
- SrgsSubset.cs
- AnnotationStore.cs
- TCPListener.cs
- IntermediatePolicyValidator.cs
- QueryOutputWriter.cs
- DesignerResources.cs
- SchemaNamespaceManager.cs
- PackagePart.cs
- InternalBufferOverflowException.cs
- ControlBuilder.cs
- UpdateTracker.cs
- RecordBuilder.cs
- KnowledgeBase.cs
- BatchParser.cs
- SharingService.cs
- ArithmeticException.cs
- HashUtility.cs
- SafeEventLogReadHandle.cs
- IdnMapping.cs
- AstTree.cs
- XmlSchemaSet.cs
- KeyConverter.cs
- WebPartDeleteVerb.cs
- IteratorDescriptor.cs
- ExpressionVisitor.cs
- XmlSigningNodeWriter.cs
- Binding.cs
- XmlSchemaDatatype.cs
- ProgressBarRenderer.cs
- LayoutEngine.cs