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
- ByteStreamMessageUtility.cs
- FunctionImportElement.cs
- ElementHost.cs
- CharacterString.cs
- AnimatedTypeHelpers.cs
- sqlinternaltransaction.cs
- ProcessModelSection.cs
- ArraySortHelper.cs
- SimpleWorkerRequest.cs
- EpmContentSerializer.cs
- MsmqInputSessionChannel.cs
- CharacterHit.cs
- HWStack.cs
- _Connection.cs
- MainMenu.cs
- LinkConverter.cs
- FormsAuthenticationModule.cs
- IdnMapping.cs
- PropVariant.cs
- CellIdBoolean.cs
- VarRefManager.cs
- XmlSecureResolver.cs
- WebPartActionVerb.cs
- EdmRelationshipRoleAttribute.cs
- BufferedConnection.cs
- DataGridTemplateColumn.cs
- BinaryFormatterSinks.cs
- FamilyMapCollection.cs
- RectangleGeometry.cs
- InkCanvasInnerCanvas.cs
- ElementUtil.cs
- DirectoryInfo.cs
- RelationshipConstraintValidator.cs
- SoapMessage.cs
- FrameworkPropertyMetadata.cs
- CatalogPartCollection.cs
- WinEventTracker.cs
- SendActivity.cs
- NamedPipeAppDomainProtocolHandler.cs
- ControllableStoryboardAction.cs
- MLangCodePageEncoding.cs
- CommandValueSerializer.cs
- DictionaryManager.cs
- UIEndRequest.cs
- EntityContainer.cs
- MediaContext.cs
- _LazyAsyncResult.cs
- Frame.cs
- URI.cs
- VerificationAttribute.cs
- PeerApplication.cs
- ITextView.cs
- GridViewEditEventArgs.cs
- InProcStateClientManager.cs
- TextEditorCopyPaste.cs
- ExpandoObject.cs
- ArgumentOutOfRangeException.cs
- MetabaseServerConfig.cs
- Renderer.cs
- LabelEditEvent.cs
- WebScriptEnablingBehavior.cs
- Size3DConverter.cs
- FontStretchConverter.cs
- TemplateControlCodeDomTreeGenerator.cs
- HtmlTitle.cs
- OleDbWrapper.cs
- OdbcReferenceCollection.cs
- XsltSettings.cs
- BooleanToVisibilityConverter.cs
- ProjectionPathBuilder.cs
- SerializationAttributes.cs
- ParameterCollectionEditorForm.cs
- ZipIOCentralDirectoryBlock.cs
- VScrollProperties.cs
- TemplatePagerField.cs
- MaskDesignerDialog.cs
- SchemaCollectionCompiler.cs
- BaseTemplateParser.cs
- ListParagraph.cs
- JsonWriter.cs
- ByteKeyFrameCollection.cs
- RuntimeConfig.cs
- SchemaImporterExtension.cs
- LocalizationComments.cs
- BoolExpr.cs
- EntityConnectionStringBuilder.cs
- SettingsPropertyCollection.cs
- VariableBinder.cs
- StreamMarshaler.cs
- MimeReflector.cs
- RemotingServices.cs
- ImageFormatConverter.cs
- SetStoryboardSpeedRatio.cs
- ClientOptions.cs
- PreProcessInputEventArgs.cs
- BooleanStorage.cs
- SqlInfoMessageEvent.cs
- GuidelineSet.cs
- ScrollContentPresenter.cs
- XmlArrayAttribute.cs