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
- ModuleElement.cs
- IndentTextWriter.cs
- DataTablePropertyDescriptor.cs
- Baml2006ReaderContext.cs
- QilParameter.cs
- HostProtectionPermission.cs
- GatewayIPAddressInformationCollection.cs
- DataGridViewCellStyle.cs
- OdbcConnectionHandle.cs
- CaseStatement.cs
- oledbmetadatacollectionnames.cs
- Converter.cs
- ToolBarButtonClickEvent.cs
- SingleQueryOperator.cs
- ContainerParagraph.cs
- ConfigurationValidatorAttribute.cs
- GridView.cs
- LineSegment.cs
- DataSourceSelectArguments.cs
- ZipPackagePart.cs
- SimpleModelProvider.cs
- LinqDataSourceUpdateEventArgs.cs
- Int64Animation.cs
- Expressions.cs
- ExeContext.cs
- entitydatasourceentitysetnameconverter.cs
- _NativeSSPI.cs
- TableLayoutRowStyleCollection.cs
- OdbcPermission.cs
- ConsoleTraceListener.cs
- SHA256.cs
- DockAndAnchorLayout.cs
- UICuesEvent.cs
- XmlArrayItemAttributes.cs
- PropertyItemInternal.cs
- OneOfTypeConst.cs
- CompositionTarget.cs
- CompatibleComparer.cs
- GatewayDefinition.cs
- DateTimePickerDesigner.cs
- controlskin.cs
- SqlXml.cs
- DiscardableAttribute.cs
- BasicCommandTreeVisitor.cs
- LineInfo.cs
- ServicesUtilities.cs
- columnmapkeybuilder.cs
- SortedDictionary.cs
- ImageMetadata.cs
- CustomCategoryAttribute.cs
- xmlglyphRunInfo.cs
- FixedSOMGroup.cs
- FormatterServices.cs
- ExpressionHelper.cs
- ZipIOBlockManager.cs
- ReversePositionQuery.cs
- OpenTypeLayoutCache.cs
- LambdaCompiler.Expressions.cs
- ApplicationSettingsBase.cs
- CheckedListBox.cs
- SqlDataSourceFilteringEventArgs.cs
- StoryFragments.cs
- DataContractSerializerOperationFormatter.cs
- ParameterToken.cs
- MessageQuerySet.cs
- ContentElement.cs
- RemoteArgument.cs
- ContainerTracking.cs
- TypeBuilderInstantiation.cs
- TokenBasedSetEnumerator.cs
- StylusPointPropertyInfoDefaults.cs
- EventSetter.cs
- ContentPathSegment.cs
- ServiceContractAttribute.cs
- PointAnimationClockResource.cs
- VisualBrush.cs
- ArraySubsetEnumerator.cs
- SmiMetaDataProperty.cs
- WindowsTooltip.cs
- StoreContentChangedEventArgs.cs
- ExeContext.cs
- LogStore.cs
- FormsAuthenticationUser.cs
- _ConnectOverlappedAsyncResult.cs
- While.cs
- AuthenticationService.cs
- ValidationRule.cs
- InstanceHandleReference.cs
- ConstraintConverter.cs
- CallbackValidator.cs
- EntityDataSourceView.cs
- ActiveXHelper.cs
- KoreanLunisolarCalendar.cs
- _BasicClient.cs
- HtmlTableRow.cs
- TTSVoice.cs
- DBNull.cs
- TreeView.cs
- Function.cs
- UniqueEventHelper.cs