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
- FrameworkTextComposition.cs
- HelpKeywordAttribute.cs
- ExpressionTable.cs
- EnumMember.cs
- XmlSchemaNotation.cs
- MarkupExtensionReturnTypeAttribute.cs
- PageRanges.cs
- Psha1DerivedKeyGeneratorHelper.cs
- PageParserFilter.cs
- MessageAction.cs
- StrokeCollectionConverter.cs
- MonthChangedEventArgs.cs
- DispatchWrapper.cs
- IpcChannel.cs
- SystemColorTracker.cs
- BlurEffect.cs
- FilteredAttributeCollection.cs
- DispatcherSynchronizationContext.cs
- Single.cs
- MailSettingsSection.cs
- GregorianCalendar.cs
- DownloadProgressEventArgs.cs
- TextTrailingCharacterEllipsis.cs
- GradientBrush.cs
- SafeFileMapViewHandle.cs
- XmlSchemaExporter.cs
- UnsafeNativeMethods.cs
- ImageList.cs
- SoapHeaderException.cs
- DataGridViewSelectedCellCollection.cs
- XPathParser.cs
- ChangeProcessor.cs
- FixedSOMFixedBlock.cs
- SessionParameter.cs
- HeaderedContentControl.cs
- DrawingImage.cs
- LinqToSqlWrapper.cs
- DataObject.cs
- Localizer.cs
- ExpressionBuilderCollection.cs
- ProfileEventArgs.cs
- TemplatePropertyEntry.cs
- loginstatus.cs
- HMACSHA512.cs
- SimplePropertyEntry.cs
- RequestUriProcessor.cs
- CultureMapper.cs
- Matrix.cs
- CacheDict.cs
- AttributedMetaModel.cs
- ExpandSegment.cs
- SizeKeyFrameCollection.cs
- CLRBindingWorker.cs
- JulianCalendar.cs
- ZipIOExtraField.cs
- QilPatternFactory.cs
- ViewService.cs
- MailAddress.cs
- GregorianCalendar.cs
- Misc.cs
- Privilege.cs
- DataControlFieldCollection.cs
- JpegBitmapEncoder.cs
- WebEventTraceProvider.cs
- AppDomainAttributes.cs
- TextDecorationCollection.cs
- ReadWriteSpinLock.cs
- ScopelessEnumAttribute.cs
- RedistVersionInfo.cs
- SystemSounds.cs
- SafeNativeMethods.cs
- DataGridViewCellStyle.cs
- HTMLTagNameToTypeMapper.cs
- DataGridPagerStyle.cs
- GlobalizationAssembly.cs
- XmlBufferReader.cs
- RepeatButton.cs
- EmptyEnumerable.cs
- QuaternionValueSerializer.cs
- HijriCalendar.cs
- MachineKeyConverter.cs
- DataGridViewCellPaintingEventArgs.cs
- StoreAnnotationsMap.cs
- ContentValidator.cs
- ADMembershipProvider.cs
- TTSVoice.cs
- MetadataCache.cs
- PropertyMappingExceptionEventArgs.cs
- GuidelineCollection.cs
- Color.cs
- SectionInformation.cs
- ConfigXmlAttribute.cs
- SchemaNamespaceManager.cs
- ContextConfiguration.cs
- WindowsListView.cs
- FilterException.cs
- OleDbRowUpdatingEvent.cs
- InfoCardUIAgent.cs
- SEHException.cs
- StyleSheet.cs