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
- HttpListenerRequest.cs
- DetailsViewInsertedEventArgs.cs
- VisualStateGroup.cs
- QilFunction.cs
- WebUtil.cs
- PageThemeBuildProvider.cs
- BaseParser.cs
- InvalidOperationException.cs
- PointCollectionValueSerializer.cs
- RuleInfoComparer.cs
- SmtpTransport.cs
- VectorCollectionValueSerializer.cs
- RelationshipEndMember.cs
- DataStreams.cs
- IgnoreSectionHandler.cs
- Menu.cs
- SchemaTableColumn.cs
- WindowsContainer.cs
- altserialization.cs
- DataObjectSettingDataEventArgs.cs
- ListControl.cs
- DataMisalignedException.cs
- BStrWrapper.cs
- Attributes.cs
- AggregateNode.cs
- ExpressionReplacer.cs
- ServiceParser.cs
- FlowDocumentPageViewerAutomationPeer.cs
- SoapEnumAttribute.cs
- AstTree.cs
- ExtensionSimplifierMarkupObject.cs
- StreamMarshaler.cs
- ObjectNavigationPropertyMapping.cs
- FilterEventArgs.cs
- PanelStyle.cs
- TextElementEnumerator.cs
- ExplicitDiscriminatorMap.cs
- SmtpClient.cs
- OdbcEnvironment.cs
- ScriptHandlerFactory.cs
- TextElementEnumerator.cs
- ScrollItemPattern.cs
- WebConfigurationHostFileChange.cs
- FlowSwitchDesigner.xaml.cs
- OracleParameterBinding.cs
- MouseButtonEventArgs.cs
- UserPreferenceChangingEventArgs.cs
- OutputCacheProfileCollection.cs
- SamlSecurityToken.cs
- ReferenceSchema.cs
- TabControl.cs
- DBParameter.cs
- LocatorPartList.cs
- StyleSelector.cs
- RequiredFieldValidator.cs
- TableCellAutomationPeer.cs
- IOException.cs
- ExceptionHandlersDesigner.cs
- ElementProxy.cs
- BasicHttpMessageSecurity.cs
- EncoderParameter.cs
- BindableAttribute.cs
- SectionInput.cs
- MultiBinding.cs
- EventLogConfiguration.cs
- _NegoStream.cs
- GradientBrush.cs
- GroupStyle.cs
- HandlerMappingMemo.cs
- NotSupportedException.cs
- NativeRecognizer.cs
- MediaTimeline.cs
- PageParser.cs
- XmlILModule.cs
- PositiveTimeSpanValidatorAttribute.cs
- DesignOnlyAttribute.cs
- FixedSOMLineCollection.cs
- DataGridViewIntLinkedList.cs
- FileSystemInfo.cs
- ItemMap.cs
- FrugalList.cs
- ParameterModifier.cs
- DataBoundLiteralControl.cs
- ObjectContextServiceProvider.cs
- SourceExpressionException.cs
- GiveFeedbackEvent.cs
- DataTableClearEvent.cs
- ActivityWithResult.cs
- ControllableStoryboardAction.cs
- DocumentApplicationState.cs
- ToolStripGripRenderEventArgs.cs
- DoubleStorage.cs
- SharedStatics.cs
- MetafileHeader.cs
- CompositeKey.cs
- BindingNavigator.cs
- DataGridViewLinkColumn.cs
- XmlSchemaAnyAttribute.cs
- DBCommandBuilder.cs
- RegexCompiler.cs