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
- TableLayoutColumnStyleCollection.cs
- VirtualPathProvider.cs
- XmlTextAttribute.cs
- SqlUtils.cs
- CommandBinding.cs
- ContractBase.cs
- XmlNodeList.cs
- XmlDataSource.cs
- DefaultTextStore.cs
- AggregateNode.cs
- AutomationPropertyInfo.cs
- RemotingClientProxy.cs
- TracePayload.cs
- MatrixCamera.cs
- KnownBoxes.cs
- FunctionCommandText.cs
- ProfessionalColors.cs
- InputQueueChannel.cs
- ToggleButtonAutomationPeer.cs
- QueryExecutionOption.cs
- BufferedGraphicsManager.cs
- IncrementalReadDecoders.cs
- TextPointer.cs
- ViewPort3D.cs
- OperationAbortedException.cs
- UICuesEvent.cs
- UserControlParser.cs
- NativeMethodsCLR.cs
- TableRow.cs
- SamlSubjectStatement.cs
- TeredoHelper.cs
- DefaultTraceListener.cs
- SchemaImporterExtension.cs
- DataAdapter.cs
- StaticSiteMapProvider.cs
- UpdateProgress.cs
- ImpersonationContext.cs
- TransactionProtocolConverter.cs
- RenderCapability.cs
- PagedDataSource.cs
- Brush.cs
- PkcsMisc.cs
- QueryStringHandler.cs
- CallbackHandler.cs
- RouteItem.cs
- ComplexBindingPropertiesAttribute.cs
- ECDiffieHellmanCng.cs
- ChooseAction.cs
- SubMenuStyle.cs
- UserControlAutomationPeer.cs
- FileDialog_Vista.cs
- OdbcParameterCollection.cs
- SqlTrackingWorkflowInstance.cs
- UpWmlPageAdapter.cs
- StdRegProviderWrapper.cs
- PreservationFileWriter.cs
- CngAlgorithm.cs
- SHA1Managed.cs
- StringSource.cs
- DiscoveryDocumentReference.cs
- RemotingHelper.cs
- CalendarTable.cs
- EntityDataSourceContainerNameItem.cs
- UrlMapping.cs
- _AutoWebProxyScriptEngine.cs
- HtmlTableCell.cs
- RecoverInstanceLocksCommand.cs
- DataColumnPropertyDescriptor.cs
- InputDevice.cs
- ProxyGenerationError.cs
- RowsCopiedEventArgs.cs
- ContextInformation.cs
- InputMethodStateTypeInfo.cs
- InlineUIContainer.cs
- XmlSchemaSimpleContent.cs
- RecognitionResult.cs
- FormViewUpdatedEventArgs.cs
- KeySpline.cs
- WindowsMenu.cs
- SimpleFileLog.cs
- RepeaterCommandEventArgs.cs
- SapiAttributeParser.cs
- ErrorHandler.cs
- ControlBuilderAttribute.cs
- Attributes.cs
- ObjectConverter.cs
- MessageTransmitTraceRecord.cs
- ConnectionsZone.cs
- TiffBitmapEncoder.cs
- Win32PrintDialog.cs
- KnownIds.cs
- StylusTip.cs
- ping.cs
- StickyNoteHelper.cs
- FormParameter.cs
- ActionNotSupportedException.cs
- PixelShader.cs
- PartialArray.cs
- ActiveDesignSurfaceEvent.cs
- TextDecorations.cs