Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / TrustUi / MS / Internal / documents / Application / ChainOfResponsibility.cs / 1 / ChainOfResponsibility.cs
//------------------------------------------------------------------------------ //// Copyright (C) Microsoft Corporation. All rights reserved. // //// An implementation of the 'Chain of Responsibility' from Design Patterns // // // History: // 08/28/2005: [....]: Initial implementation. //----------------------------------------------------------------------------- using System.Collections.Generic; namespace MS.Internal.Documents.Application { ////// An implementation of the 'Chain of Responsibility' from Design Patterns /// ////// Design Comments: /// /// The pattern is implemented as: /// /// - concrete coupling of Ts (successors) at construction /// - request are represented by ChainOfResponsiblity[T, S].Action delegate /// where S is the parameter data /// - IChainOfResponsibiltyNode[S] is used to determin if the member is willing /// to participate in the request. /// ///A common type for all members of the chain. ///A common type for data for all members of the chain. /// internal class ChainOfResponsiblitywhere T : IChainOfResponsibiltyNode { #region Constructors //------------------------------------------------------------------------- // Constructors //------------------------------------------------------------------------- ////// Provides for concrete coupling of T's at construction. /// /// internal ChainOfResponsiblity( params T[] members) { _members = new List(members); } #endregion Constructors #region Internal Methods //-------------------------------------------------------------------------- // Internal Methods //------------------------------------------------------------------------- /// /// Will dispatch the action first to last in the chain until a member /// reports handling the action. /// ///True if successfully handled by a member. /// The action to perform. /// The subject to perform it on. internal bool Dispatch(ChainOfResponsiblity.Action action, S subject) { bool handled = false; foreach (T member in _members) { if (member.IsResponsible(subject)) { Trace.SafeWrite( Trace.File, "Dispatching {0} to {1} using {2}.", action.Method.Name, member.GetType().Name, subject.GetType().Name); handled = action(member, subject); if (handled) { Trace.SafeWrite( Trace.File, "Finished {0} by {1} with {2}.", action.Method.Name, member.GetType().Name, subject.GetType().Name); break; } } } return handled; } #endregion Internal Methods #region Internal Delegates //-------------------------------------------------------------------------- // Internal Delegates //-------------------------------------------------------------------------- /// /// Actions which members T can be perform on S. /// /// The member to perform the action. /// The subject to perform the action on. ///True if handled by the member. internal delegate bool Action(T member, S subject); #endregion Internal Delegates #region Private Fields //------------------------------------------------------------------------- // Private Fields //-------------------------------------------------------------------------- ////// The concrete list of members. /// private List_members; #endregion Private Fields } } // 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
- BaseServiceProvider.cs
- AutoResetEvent.cs
- LinqDataSource.cs
- RoleService.cs
- GACMembershipCondition.cs
- PartitionedDataSource.cs
- XmlSerializationGeneratedCode.cs
- String.cs
- EventHandlers.cs
- SelectionProviderWrapper.cs
- BindingContext.cs
- MoveSizeWinEventHandler.cs
- Funcletizer.cs
- RangeValueProviderWrapper.cs
- MatchAttribute.cs
- Vector.cs
- PeerNameResolver.cs
- GenericUriParser.cs
- Deflater.cs
- BaseComponentEditor.cs
- ProxyFragment.cs
- HttpFileCollection.cs
- EndpointFilterProvider.cs
- LinearGradientBrush.cs
- SignedPkcs7.cs
- GenericWebPart.cs
- Internal.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- ListItemConverter.cs
- BooleanConverter.cs
- EmptyCollection.cs
- MethodRental.cs
- GrammarBuilderRuleRef.cs
- WriteStateInfoBase.cs
- Encoder.cs
- EntryPointNotFoundException.cs
- Base64Encoder.cs
- PtsCache.cs
- EntityCommand.cs
- PersistenceContextEnlistment.cs
- Separator.cs
- XPathMultyIterator.cs
- MdImport.cs
- LineGeometry.cs
- CodeRemoveEventStatement.cs
- ColorAnimation.cs
- PaginationProgressEventArgs.cs
- FlowPanelDesigner.cs
- UxThemeWrapper.cs
- TemplateBaseAction.cs
- ResolveCompletedEventArgs.cs
- HistoryEventArgs.cs
- DescendentsWalker.cs
- ManifestSignatureInformation.cs
- XPathQilFactory.cs
- FlowDocument.cs
- RangeContentEnumerator.cs
- MatrixStack.cs
- SqlServer2KCompatibilityAnnotation.cs
- DrawingGroup.cs
- Currency.cs
- CaseStatementProjectedSlot.cs
- CultureInfo.cs
- TextFormatterImp.cs
- ExtendedPropertyCollection.cs
- FatalException.cs
- TextServicesPropertyRanges.cs
- InvalidAsynchronousStateException.cs
- DbProviderConfigurationHandler.cs
- ScalarRestriction.cs
- IconHelper.cs
- DataBoundLiteralControl.cs
- PageOutputQuality.cs
- WindowHelperService.cs
- NameValueConfigurationElement.cs
- AutoResizedEvent.cs
- SendMessageRecord.cs
- ConditionCollection.cs
- TemplateInstanceAttribute.cs
- DataReaderContainer.cs
- DecimalAnimationBase.cs
- HtmlInputImage.cs
- BamlCollectionHolder.cs
- SecureUICommand.cs
- AssemblyAssociatedContentFileAttribute.cs
- FixedPageProcessor.cs
- VirtualizingPanel.cs
- LineBreakRecord.cs
- DataRecordInfo.cs
- ReferenceEqualityComparer.cs
- InputDevice.cs
- PartialTrustVisibleAssembly.cs
- FlagsAttribute.cs
- AvtEvent.cs
- RichTextBoxAutomationPeer.cs
- SqlFunctions.cs
- diagnosticsswitches.cs
- EntityDataSourceUtil.cs
- ConfigurationElementCollection.cs
- PtsContext.cs