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 ChainOfResponsiblity where 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
- SystemIdentity.cs
- FormViewInsertEventArgs.cs
- Cursor.cs
- XmlQualifiedName.cs
- TagPrefixCollection.cs
- ColorTransformHelper.cs
- DrawingImage.cs
- Parser.cs
- RightsController.cs
- RSAProtectedConfigurationProvider.cs
- ISCIIEncoding.cs
- CompilationRelaxations.cs
- DataServiceHostFactory.cs
- VariantWrapper.cs
- Point3DConverter.cs
- String.cs
- CommandEventArgs.cs
- DataGridTextBoxColumn.cs
- SqlUtil.cs
- ObjectFullSpanRewriter.cs
- VerificationException.cs
- RuntimeWrappedException.cs
- BehaviorDragDropEventArgs.cs
- QilLoop.cs
- RotationValidation.cs
- PassportAuthenticationModule.cs
- FileIOPermission.cs
- ToolZone.cs
- ListControl.cs
- HtmlHead.cs
- SqlDataSource.cs
- DependencyObjectValidator.cs
- TitleStyle.cs
- BasicCommandTreeVisitor.cs
- SemanticResultValue.cs
- XmlILStorageConverter.cs
- TheQuery.cs
- DocumentOrderComparer.cs
- StaticTextPointer.cs
- ResourceReferenceExpressionConverter.cs
- BamlReader.cs
- AtlasWeb.Designer.cs
- MultipartIdentifier.cs
- DataGridViewTopLeftHeaderCell.cs
- DefaultAsyncDataDispatcher.cs
- WindowHelperService.cs
- MouseOverProperty.cs
- ChangeToolStripParentVerb.cs
- ObjectSet.cs
- ProviderConnectionPoint.cs
- Selector.cs
- OlePropertyStructs.cs
- TextTreeText.cs
- Stroke.cs
- CapabilitiesAssignment.cs
- SystemPens.cs
- HelpKeywordAttribute.cs
- MembershipUser.cs
- UnsafeNativeMethodsCLR.cs
- QueueProcessor.cs
- IPAddress.cs
- MouseWheelEventArgs.cs
- smtpconnection.cs
- WindowsListViewGroup.cs
- InvalidDataException.cs
- ZipIORawDataFileBlock.cs
- SafeFileMappingHandle.cs
- CalendarDateRange.cs
- VScrollBar.cs
- Style.cs
- MetadataArtifactLoaderCompositeFile.cs
- ThumbAutomationPeer.cs
- LeftCellWrapper.cs
- EntityDataSourceValidationException.cs
- BaseInfoTable.cs
- LocalTransaction.cs
- ExceptionHandler.cs
- FormsAuthenticationEventArgs.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- SqlDependencyListener.cs
- SemaphoreSecurity.cs
- AsyncPostBackErrorEventArgs.cs
- MarshalByValueComponent.cs
- ConsumerConnectionPoint.cs
- ConnectionStringsExpressionBuilder.cs
- DefaultHttpHandler.cs
- ClickablePoint.cs
- TextRangeBase.cs
- TimeEnumHelper.cs
- AutomationEventArgs.cs
- AsyncInvokeContext.cs
- DetailsViewInsertedEventArgs.cs
- TypeExtension.cs
- DocumentApplication.cs
- OleDbMetaDataFactory.cs
- Dynamic.cs
- InstanceOwnerException.cs
- MessageFilterTable.cs
- DrawingImage.cs
- X509RecipientCertificateClientElement.cs