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
- BulletedListEventArgs.cs
- counter.cs
- Converter.cs
- UInt16.cs
- ExtenderProvidedPropertyAttribute.cs
- LinqDataSourceSelectEventArgs.cs
- WebPartEditorCancelVerb.cs
- FreezableCollection.cs
- ImmutableDispatchRuntime.cs
- SspiNegotiationTokenProviderState.cs
- StylusPointPropertyId.cs
- ToolStripGripRenderEventArgs.cs
- PageBuildProvider.cs
- HeaderCollection.cs
- ResourcesChangeInfo.cs
- StylusPointPropertyUnit.cs
- ClientBase.cs
- TemplateBindingExpressionConverter.cs
- ExternalCalls.cs
- DateTime.cs
- NavigatingCancelEventArgs.cs
- CanonicalFormWriter.cs
- HttpResponse.cs
- SiteMapDataSource.cs
- SQLBinary.cs
- Membership.cs
- DataSetUtil.cs
- XmlDataSource.cs
- CatalogPartChrome.cs
- RangeValuePattern.cs
- TransformDescriptor.cs
- IntSecurity.cs
- PartDesigner.cs
- ItemCheckEvent.cs
- SortedList.cs
- NamespaceEmitter.cs
- TextBoxRenderer.cs
- UInt32.cs
- AmbientLight.cs
- SystemBrushes.cs
- ChtmlImageAdapter.cs
- Query.cs
- SqlVersion.cs
- CodeAccessPermission.cs
- ConfigXmlSignificantWhitespace.cs
- MethodSet.cs
- RawStylusActions.cs
- DataTransferEventArgs.cs
- SingleAnimationUsingKeyFrames.cs
- WebPartVerbCollection.cs
- Font.cs
- ObjectDataSource.cs
- ChineseLunisolarCalendar.cs
- StreamUpdate.cs
- HtmlListAdapter.cs
- RegexCaptureCollection.cs
- NetworkInformationPermission.cs
- DataGridViewTextBoxEditingControl.cs
- odbcmetadatacolumnnames.cs
- ExeConfigurationFileMap.cs
- XmlAnyElementAttribute.cs
- ProviderException.cs
- NetTcpSection.cs
- CompositeFontInfo.cs
- SignatureResourceHelper.cs
- complextypematerializer.cs
- AvTraceFormat.cs
- DataGridViewColumn.cs
- SecurityTokenParameters.cs
- WindowsFormsHelpers.cs
- ExpandButtonVisibilityConverter.cs
- CommandID.cs
- OneWayElement.cs
- QueryPrefixOp.cs
- SmiMetaData.cs
- TraceData.cs
- OdbcCommand.cs
- EmbossBitmapEffect.cs
- XmlWellformedWriter.cs
- SqlDataSourceEnumerator.cs
- AutomationPropertyInfo.cs
- MetadataItemCollectionFactory.cs
- Region.cs
- ColumnMapVisitor.cs
- MULTI_QI.cs
- StylusPointPropertyInfoDefaults.cs
- MessageSecurityOverMsmqElement.cs
- WebPartZone.cs
- BrowserCapabilitiesFactory35.cs
- ApplicationHost.cs
- MoveSizeWinEventHandler.cs
- SqlTypesSchemaImporter.cs
- VisualCollection.cs
- DictionaryContent.cs
- EntitySqlQueryCacheKey.cs
- PostBackOptions.cs
- DataGridViewTextBoxCell.cs
- RegistryConfigurationProvider.cs
- DecoderFallback.cs
- StopRoutingHandler.cs