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
- MultiDataTrigger.cs
- HierarchicalDataTemplate.cs
- TextInfo.cs
- RecognizedAudio.cs
- OverflowException.cs
- DataBoundLiteralControl.cs
- ConfigurationStrings.cs
- CharEnumerator.cs
- SchemaNotation.cs
- IntellisenseTextBox.cs
- Transform.cs
- PopupControlService.cs
- MyContact.cs
- StylusPointProperty.cs
- Pointer.cs
- WindowCollection.cs
- PageBuildProvider.cs
- ButtonChrome.cs
- AutomationPatternInfo.cs
- SchemaImporter.cs
- ControlPaint.cs
- BatchWriter.cs
- SatelliteContractVersionAttribute.cs
- UserNamePasswordValidator.cs
- MutableAssemblyCacheEntry.cs
- QueueProcessor.cs
- PagedDataSource.cs
- XmlAttributeCollection.cs
- DoubleLinkListEnumerator.cs
- RichTextBox.cs
- ReturnType.cs
- DataRecordObjectView.cs
- CachedBitmap.cs
- ReturnValue.cs
- PropertyGridEditorPart.cs
- UIElementPropertyUndoUnit.cs
- ItemCollection.cs
- DispatcherOperation.cs
- ObjectQueryProvider.cs
- HostUtils.cs
- TextShapeableCharacters.cs
- ListControl.cs
- ProcessModule.cs
- DataGridTextColumn.cs
- DBNull.cs
- RangeBase.cs
- WebScriptServiceHostFactory.cs
- CustomActivityDesigner.cs
- SystemUdpStatistics.cs
- TextTreeFixupNode.cs
- ListItemCollection.cs
- CodeTypeParameterCollection.cs
- ComponentCommands.cs
- DispatcherTimer.cs
- PocoEntityKeyStrategy.cs
- AnonymousIdentificationModule.cs
- Column.cs
- BehaviorEditorPart.cs
- BitmapEffectInputConnector.cs
- QuaternionRotation3D.cs
- DataReaderContainer.cs
- InvalidWMPVersionException.cs
- ErrorRuntimeConfig.cs
- CollectionViewSource.cs
- DataRowChangeEvent.cs
- CngUIPolicy.cs
- ManagementClass.cs
- WindowsToolbarAsMenu.cs
- LayoutSettings.cs
- SessionStateContainer.cs
- TablePattern.cs
- DataListItemEventArgs.cs
- ResourceDescriptionAttribute.cs
- ScaleTransform3D.cs
- TextSelectionHelper.cs
- QuestionEventArgs.cs
- UInt32.cs
- MenuItemBindingCollection.cs
- HtmlMobileTextWriter.cs
- CollectionContainer.cs
- SynchronizedInputPattern.cs
- IntSecurity.cs
- XPathSelfQuery.cs
- PageParserFilter.cs
- HtmlButton.cs
- RuntimeCompatibilityAttribute.cs
- DataListItemEventArgs.cs
- DataSet.cs
- OLEDB_Util.cs
- FileRegion.cs
- CodeGeneratorOptions.cs
- FormViewUpdateEventArgs.cs
- CodeBlockBuilder.cs
- DtrList.cs
- EDesignUtil.cs
- MobileControl.cs
- ChildrenQuery.cs
- PcmConverter.cs
- Terminate.cs
- IRCollection.cs