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
- TextEndOfParagraph.cs
- LayoutEvent.cs
- ExpressionWriter.cs
- SmtpReplyReaderFactory.cs
- System.Data_BID.cs
- TerminateSequenceResponse.cs
- GenericParameterDataContract.cs
- DateTimeOffsetStorage.cs
- DefaultShape.cs
- CompiledAction.cs
- SecurityHeaderElementInferenceEngine.cs
- TransactionsSectionGroup.cs
- AsnEncodedData.cs
- OLEDB_Enum.cs
- AttributeCollection.cs
- ProxyHwnd.cs
- xmlsaver.cs
- UrlMappingsSection.cs
- ListViewTableCell.cs
- DnsEndPoint.cs
- ToolStripControlHost.cs
- CommandLineParser.cs
- Int32CollectionConverter.cs
- StringStorage.cs
- BrowserDefinition.cs
- DataControlReferenceCollection.cs
- XmlSchemaFacet.cs
- formatstringdialog.cs
- mactripleDES.cs
- XmlArrayItemAttribute.cs
- RtType.cs
- ValidationService.cs
- ConsoleCancelEventArgs.cs
- DetailsViewPagerRow.cs
- OdbcConnectionPoolProviderInfo.cs
- CustomError.cs
- CollectionEditVerbManager.cs
- HttpCachePolicy.cs
- odbcmetadatafactory.cs
- Bidi.cs
- ArgumentException.cs
- PrintPreviewDialog.cs
- ProviderConnectionPoint.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- DataGridCommandEventArgs.cs
- DataGridViewBindingCompleteEventArgs.cs
- AddingNewEventArgs.cs
- LinqTreeNodeEvaluator.cs
- RuleProcessor.cs
- MembershipValidatePasswordEventArgs.cs
- DocComment.cs
- LocatorPart.cs
- QilInvokeLateBound.cs
- ListSourceHelper.cs
- ListViewInsertEventArgs.cs
- SQLRoleProvider.cs
- TraceEventCache.cs
- SharedTcpTransportManager.cs
- EntityDataSourceSelectedEventArgs.cs
- WindowsPrincipal.cs
- DesignerForm.cs
- ExtendedPropertyDescriptor.cs
- OverlappedContext.cs
- GridViewUpdateEventArgs.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- Operator.cs
- HttpResponseHeader.cs
- VersionedStreamOwner.cs
- AddInToken.cs
- ObjectDataSource.cs
- ExpressionEditor.cs
- HttpRequestCacheValidator.cs
- StateElementCollection.cs
- XmlSchemas.cs
- ListSourceHelper.cs
- SpeechRecognitionEngine.cs
- QuarticEase.cs
- EntityDataSourceSelectingEventArgs.cs
- AddInIpcChannel.cs
- DependsOnAttribute.cs
- MoveSizeWinEventHandler.cs
- Rules.cs
- CompiledQuery.cs
- ProcessHostConfigUtils.cs
- UniqueIdentifierService.cs
- Mutex.cs
- Stylesheet.cs
- EUCJPEncoding.cs
- TableLayoutColumnStyleCollection.cs
- IsolatedStorageException.cs
- ReturnEventArgs.cs
- LookupBindingPropertiesAttribute.cs
- TextWriterTraceListener.cs
- BufferedOutputStream.cs
- StickyNoteHelper.cs
- CompModSwitches.cs
- TdsParser.cs
- TransformedBitmap.cs
- ExternalCalls.cs
- ResolveInfo.cs