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
- SHA256.cs
- DisplayToken.cs
- FontSizeConverter.cs
- ChangeTracker.cs
- DataGridLength.cs
- BigInt.cs
- SystemColors.cs
- AttachedAnnotation.cs
- AssemblyInfo.cs
- SByte.cs
- StagingAreaInputItem.cs
- TripleDESCryptoServiceProvider.cs
- Intellisense.cs
- RawStylusActions.cs
- ScrollData.cs
- InternalResources.cs
- ServiceSecurityContext.cs
- ClonableStack.cs
- ListViewTableRow.cs
- ComEventsHelper.cs
- ListItemConverter.cs
- DetailsViewRow.cs
- SystemIPGlobalStatistics.cs
- DbParameterCollectionHelper.cs
- TextEffectCollection.cs
- AddInPipelineAttributes.cs
- MetadataSerializer.cs
- TextRunTypographyProperties.cs
- XDRSchema.cs
- Classification.cs
- EncodingTable.cs
- AnnouncementEndpoint.cs
- GroupQuery.cs
- RequestBringIntoViewEventArgs.cs
- FilteredDataSetHelper.cs
- MetadataItem.cs
- CultureSpecificStringDictionary.cs
- CallbackCorrelationInitializer.cs
- SettingsAttributeDictionary.cs
- PropertyEntry.cs
- TimeSpanConverter.cs
- ToolStripMenuItem.cs
- SafeFileMappingHandle.cs
- Asn1IntegerConverter.cs
- DataBinder.cs
- GeometryDrawing.cs
- XPathNavigator.cs
- AnnotationHighlightLayer.cs
- Label.cs
- XmlC14NWriter.cs
- SqlConnectionFactory.cs
- Literal.cs
- SqlNotificationEventArgs.cs
- ValueTable.cs
- DataServiceKeyAttribute.cs
- XmlSerializerImportOptions.cs
- SqlParameter.cs
- DoubleCollection.cs
- FreezableOperations.cs
- UnsafePeerToPeerMethods.cs
- ContextDataSourceContextData.cs
- Html32TextWriter.cs
- ComponentEvent.cs
- FullTrustAssemblyCollection.cs
- EnumConverter.cs
- PlatformNotSupportedException.cs
- PersistChildrenAttribute.cs
- DtcInterfaces.cs
- NullableDoubleMinMaxAggregationOperator.cs
- MutexSecurity.cs
- ExceptionRoutedEventArgs.cs
- UserControlParser.cs
- EntityDataSourceViewSchema.cs
- SHA1.cs
- InvariantComparer.cs
- KeyValueInternalCollection.cs
- AxisAngleRotation3D.cs
- DesignerCategoryAttribute.cs
- ArraySortHelper.cs
- IndentTextWriter.cs
- WebPartConnectionsEventArgs.cs
- MultiSelector.cs
- SemanticResultKey.cs
- TableParaClient.cs
- SrgsGrammar.cs
- EventRoute.cs
- SafeNativeMethods.cs
- FixedDocument.cs
- ChoiceConverter.cs
- TreeView.cs
- FixedSOMFixedBlock.cs
- WebPartTransformerAttribute.cs
- ChangeInterceptorAttribute.cs
- XmlUrlEditor.cs
- PropertyPathConverter.cs
- ScriptControl.cs
- OdbcConnectionStringbuilder.cs
- COMException.cs
- FormViewUpdatedEventArgs.cs
- DiscardableAttribute.cs