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
- PriorityQueue.cs
- BitmapSource.cs
- DataMemberConverter.cs
- QueueAccessMode.cs
- SqlBulkCopyColumnMappingCollection.cs
- MeasureItemEvent.cs
- NotificationContext.cs
- DoubleAnimationClockResource.cs
- IDataContractSurrogate.cs
- RecognitionResult.cs
- ProxySimple.cs
- WsdlBuildProvider.cs
- DataColumn.cs
- FrameworkContentElement.cs
- WebPartDesigner.cs
- NumberFormatter.cs
- CustomCategoryAttribute.cs
- SymmetricAlgorithm.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- sqlnorm.cs
- ObjectManager.cs
- DefinitionBase.cs
- InputScopeConverter.cs
- ProcessHostMapPath.cs
- DeadCharTextComposition.cs
- TypeDescriptionProvider.cs
- SimpleFieldTemplateFactory.cs
- ViewBox.cs
- FontStyleConverter.cs
- FormViewCommandEventArgs.cs
- CompareInfo.cs
- ADMembershipUser.cs
- CultureMapper.cs
- LinearKeyFrames.cs
- DataGridViewCellCancelEventArgs.cs
- PolicyLevel.cs
- PagesSection.cs
- ProcessHostServerConfig.cs
- PointUtil.cs
- SchemaTableOptionalColumn.cs
- DiscreteKeyFrames.cs
- _UriTypeConverter.cs
- CellTreeNode.cs
- CollectionViewProxy.cs
- ScriptControlDescriptor.cs
- EntityParameter.cs
- DocumentGrid.cs
- SqlRecordBuffer.cs
- GiveFeedbackEventArgs.cs
- FloaterBaseParaClient.cs
- SplitterPanelDesigner.cs
- ServiceEndpointCollection.cs
- Semaphore.cs
- Visual3DCollection.cs
- ExpressionBindingCollection.cs
- Root.cs
- ProtocolsSection.cs
- WindowsGraphics.cs
- ZipIOExtraFieldZip64Element.cs
- MaskedTextProvider.cs
- DataSourceControlBuilder.cs
- XmlTextAttribute.cs
- COM2ExtendedTypeConverter.cs
- DashStyles.cs
- TcpServerChannel.cs
- GlobalProxySelection.cs
- InvariantComparer.cs
- TypeReference.cs
- DetailsViewModeEventArgs.cs
- IndexOutOfRangeException.cs
- CheckBoxFlatAdapter.cs
- EmptyStringExpandableObjectConverter.cs
- SoapSchemaImporter.cs
- QuerySelectOp.cs
- ModifierKeysValueSerializer.cs
- TextBoxAutoCompleteSourceConverter.cs
- DefaultAsyncDataDispatcher.cs
- TaskDesigner.cs
- XmlCharCheckingReader.cs
- _NestedMultipleAsyncResult.cs
- ObjectSet.cs
- Expr.cs
- EventLogRecord.cs
- ResourceIDHelper.cs
- OrderedParallelQuery.cs
- RoutedEventHandlerInfo.cs
- RayHitTestParameters.cs
- MD5HashHelper.cs
- ProcessModelInfo.cs
- InputProviderSite.cs
- ChannelTraceRecord.cs
- ShapingWorkspace.cs
- ProcessThread.cs
- XmlBufferReader.cs
- HashMembershipCondition.cs
- VisualTarget.cs
- FormatConvertedBitmap.cs
- WinEventQueueItem.cs
- DesignTimeSiteMapProvider.cs
- NativeMethods.cs