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
- StaticDataManager.cs
- ParserOptions.cs
- TimeSpanOrInfiniteConverter.cs
- ErrorTableItemStyle.cs
- PeerToPeerException.cs
- LocalValueEnumerator.cs
- TryCatch.cs
- RichTextBoxAutomationPeer.cs
- SchemaComplexType.cs
- SchemaElementLookUpTableEnumerator.cs
- GeneralTransformGroup.cs
- DataFormats.cs
- TreeViewImageIndexConverter.cs
- FormsAuthenticationEventArgs.cs
- AppDomainAttributes.cs
- JsonObjectDataContract.cs
- TemplateParser.cs
- AuthenticationConfig.cs
- BaseCAMarshaler.cs
- StandardBindingElementCollection.cs
- RelationshipConverter.cs
- PrefixQName.cs
- TypeViewSchema.cs
- ResourcePool.cs
- DataGridRelationshipRow.cs
- SystemIPInterfaceProperties.cs
- CodeStatement.cs
- ReadContentAsBinaryHelper.cs
- FreeIndexList.cs
- Point.cs
- AsyncMethodInvoker.cs
- EncoderBestFitFallback.cs
- ManualResetEvent.cs
- mil_sdk_version.cs
- UInt32Converter.cs
- CodeGeneratorAttribute.cs
- EmptyCollection.cs
- StringUtil.cs
- DecimalKeyFrameCollection.cs
- XmlDataSourceNodeDescriptor.cs
- TagPrefixAttribute.cs
- MergablePropertyAttribute.cs
- SmiGettersStream.cs
- ResourceExpressionEditor.cs
- DataShape.cs
- DrawingServices.cs
- AppDomainManager.cs
- WebPartAddingEventArgs.cs
- DeferredReference.cs
- GlyphRun.cs
- QilSortKey.cs
- RectangleGeometry.cs
- TriggerCollection.cs
- PropertyRef.cs
- GeneralTransform3D.cs
- KeyGestureConverter.cs
- SynchronousSendBindingElement.cs
- DeviceFiltersSection.cs
- RemoteHelper.cs
- ForceCopyBuildProvider.cs
- ReferenceConverter.cs
- NullableConverter.cs
- FileDialog.cs
- LogicalExpr.cs
- InvalidPrinterException.cs
- DateTimeOffset.cs
- ImageResources.Designer.cs
- VScrollBar.cs
- FixedDocument.cs
- DmlSqlGenerator.cs
- DataContractJsonSerializerOperationFormatter.cs
- SiblingIterators.cs
- NamespaceList.cs
- BuildManager.cs
- activationcontext.cs
- HttpModuleActionCollection.cs
- CellParaClient.cs
- BoolLiteral.cs
- JapaneseCalendar.cs
- PrintPageEvent.cs
- GcSettings.cs
- ConfigurationStrings.cs
- EpmCustomContentSerializer.cs
- Int32Rect.cs
- XsdCachingReader.cs
- RoutedEvent.cs
- VectorAnimationUsingKeyFrames.cs
- UpdateRecord.cs
- AtomMaterializerLog.cs
- XmlElementAttribute.cs
- SkinBuilder.cs
- XMLSchema.cs
- UInt32.cs
- DataPagerCommandEventArgs.cs
- ProviderSettingsCollection.cs
- WindowPattern.cs
- IERequestCache.cs
- BuildResult.cs
- DebugHandleTracker.cs
- externdll.cs