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
- DecoderReplacementFallback.cs
- SafeProcessHandle.cs
- SignedInfo.cs
- DataGrid.cs
- AssertHelper.cs
- MulticastDelegate.cs
- QualifierSet.cs
- GridViewCancelEditEventArgs.cs
- CommonRemoteMemoryBlock.cs
- SQLDecimalStorage.cs
- MarkupExtensionReturnTypeAttribute.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- _CacheStreams.cs
- ThreadStateException.cs
- ObjectQueryProvider.cs
- CancellableEnumerable.cs
- BaseDataBoundControl.cs
- SoapEnumAttribute.cs
- BindingRestrictions.cs
- XmlSchemaSequence.cs
- Win32MouseDevice.cs
- pingexception.cs
- IssuanceLicense.cs
- QilInvokeEarlyBound.cs
- EntityUtil.cs
- SByteConverter.cs
- SapiRecoContext.cs
- MenuCommandService.cs
- CompilerResults.cs
- SelectionRange.cs
- IPipelineRuntime.cs
- LayoutEvent.cs
- XmlChildNodes.cs
- ObjectAnimationBase.cs
- FocusWithinProperty.cs
- TextServicesPropertyRanges.cs
- VisualStyleRenderer.cs
- SmtpCommands.cs
- OracleBinary.cs
- DataTableClearEvent.cs
- ScalarConstant.cs
- listviewsubitemcollectioneditor.cs
- WizardPanelChangingEventArgs.cs
- LinkClickEvent.cs
- XmlArrayAttribute.cs
- DoubleUtil.cs
- GeneratedView.cs
- EncodingDataItem.cs
- SiteMapHierarchicalDataSourceView.cs
- OdbcFactory.cs
- WrappedReader.cs
- Button.cs
- _UriTypeConverter.cs
- NamespaceQuery.cs
- FileNotFoundException.cs
- FamilyTypeface.cs
- DataPointer.cs
- ping.cs
- TdsParserSafeHandles.cs
- _FixedSizeReader.cs
- NonSerializedAttribute.cs
- ParallelTimeline.cs
- EditorServiceContext.cs
- TreeNodeCollection.cs
- AdditionalEntityFunctions.cs
- TextElementCollection.cs
- SelectionRangeConverter.cs
- ScriptManagerProxy.cs
- X509CertificateValidator.cs
- StatusBarPanelClickEvent.cs
- SizeAnimationBase.cs
- NonClientArea.cs
- PerspectiveCamera.cs
- BindingManagerDataErrorEventArgs.cs
- DocumentCollection.cs
- RequestCache.cs
- ListBoxAutomationPeer.cs
- UndoManager.cs
- Registry.cs
- CompiledRegexRunner.cs
- BrowserCapabilitiesCompiler.cs
- PageAsyncTaskManager.cs
- TaskForm.cs
- CreateUserWizard.cs
- WindowsTab.cs
- RecognitionResult.cs
- ResolvePPIDRequest.cs
- SafeEventLogWriteHandle.cs
- KeyedCollection.cs
- ViewSimplifier.cs
- _Win32.cs
- Encoder.cs
- MsmqInputMessagePool.cs
- SqlDataSourceSelectingEventArgs.cs
- UseManagedPresentationElement.cs
- FontFamilyIdentifier.cs
- HttpStreamXmlDictionaryWriter.cs
- RightsManagementLicense.cs
- DefaultSection.cs
- HeaderedContentControl.cs