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
- ComplexLine.cs
- DataSourceSerializationException.cs
- ValidationRuleCollection.cs
- CannotUnloadAppDomainException.cs
- ServiceDescription.cs
- RegexGroup.cs
- GcSettings.cs
- OrthographicCamera.cs
- SafeViewOfFileHandle.cs
- Button.cs
- BitStack.cs
- ImpersonateTokenRef.cs
- EntityCommand.cs
- _WebProxyDataBuilder.cs
- RoutingExtension.cs
- Mappings.cs
- StructuredTypeEmitter.cs
- InputScope.cs
- AdRotator.cs
- EditCommandColumn.cs
- CodeDOMUtility.cs
- CustomSignedXml.cs
- SettingsSavedEventArgs.cs
- ProcessInfo.cs
- RbTree.cs
- AuthStoreRoleProvider.cs
- LayoutEngine.cs
- InstanceCreationEditor.cs
- JavaScriptObjectDeserializer.cs
- RTTypeWrapper.cs
- Duration.cs
- DetailsViewPageEventArgs.cs
- NativeCppClassAttribute.cs
- MetadataConversionError.cs
- DaylightTime.cs
- ConversionHelper.cs
- Int32EqualityComparer.cs
- ControlType.cs
- LinearGradientBrush.cs
- DrawingAttributeSerializer.cs
- DataSourceControlBuilder.cs
- ProjectionCamera.cs
- Deserializer.cs
- ClientFormsAuthenticationCredentials.cs
- RoutedCommand.cs
- AppSettingsReader.cs
- KeyBinding.cs
- DataGridSortCommandEventArgs.cs
- ConfigurationSectionCollection.cs
- InertiaRotationBehavior.cs
- FilterException.cs
- RectangleF.cs
- TemplateInstanceAttribute.cs
- SspiWrapper.cs
- FrugalMap.cs
- PersonalizableTypeEntry.cs
- WrappedKeySecurityTokenParameters.cs
- XmlSchemaImporter.cs
- WebService.cs
- XmlDataSourceView.cs
- FileDetails.cs
- VariableQuery.cs
- PolicyReader.cs
- CatalogPart.cs
- Pair.cs
- IPCCacheManager.cs
- GridErrorDlg.cs
- SchemaInfo.cs
- CategoryGridEntry.cs
- CategoryGridEntry.cs
- EventToken.cs
- VolatileResourceManager.cs
- BinaryObjectReader.cs
- panel.cs
- ColumnCollection.cs
- HtmlEmptyTagControlBuilder.cs
- InvalidWMPVersionException.cs
- TripleDESCryptoServiceProvider.cs
- PrintPreviewGraphics.cs
- CompilationRelaxations.cs
- FloatUtil.cs
- SqlDataReaderSmi.cs
- SharedPersonalizationStateInfo.cs
- DataObjectCopyingEventArgs.cs
- GroupDescription.cs
- DependsOnAttribute.cs
- TextSyndicationContentKindHelper.cs
- MenuItemStyle.cs
- ImportCatalogPart.cs
- BCLDebug.cs
- Permission.cs
- ProtocolsConfiguration.cs
- WebPartConnectVerb.cs
- CodePropertyReferenceExpression.cs
- DataPagerFieldCommandEventArgs.cs
- GeometryDrawing.cs
- WebPartDisplayModeEventArgs.cs
- ProcessHostConfigUtils.cs
- ExtractedStateEntry.cs
- ClientScriptManagerWrapper.cs