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
- ReadOnlyHierarchicalDataSourceView.cs
- ListSortDescription.cs
- ArglessEventHandlerProxy.cs
- objectquery_tresulttype.cs
- XmlResolver.cs
- AnnotationAdorner.cs
- SymbolType.cs
- UpdateManifestForBrowserApplication.cs
- ExceptionUtil.cs
- ClientRuntime.cs
- StorageConditionPropertyMapping.cs
- TransformGroup.cs
- SqlDataSourceStatusEventArgs.cs
- entitydatasourceentitysetnameconverter.cs
- ChannelListenerBase.cs
- ClientSettingsProvider.cs
- EventEntry.cs
- SmtpCommands.cs
- FormsAuthenticationTicket.cs
- RoleGroupCollection.cs
- GeneralTransform3DTo2D.cs
- XmlAttributeProperties.cs
- DataGridViewRowStateChangedEventArgs.cs
- ModuleConfigurationInfo.cs
- PropertyDescriptorCollection.cs
- SchemaReference.cs
- MobileSysDescriptionAttribute.cs
- baseshape.cs
- RMEnrollmentPage2.cs
- MsmqInputMessage.cs
- ExpressionWriter.cs
- AvTraceFormat.cs
- sitestring.cs
- UshortList2.cs
- BitSet.cs
- GPRECT.cs
- DynamicExpression.cs
- DataGridViewColumnConverter.cs
- XmlSerializerFactory.cs
- DataListItem.cs
- SamlSerializer.cs
- XmlDataSourceNodeDescriptor.cs
- FixedHyperLink.cs
- ExceptionDetail.cs
- SchemaImporterExtensionElement.cs
- SortDescription.cs
- DbModificationClause.cs
- CompilationSection.cs
- MessageFault.cs
- DynamicDataExtensions.cs
- XamlDebuggerXmlReader.cs
- TextTreeTextNode.cs
- DocumentApplicationJournalEntry.cs
- IDQuery.cs
- XmlBinaryReader.cs
- CompileXomlTask.cs
- WebSysDisplayNameAttribute.cs
- FontWeights.cs
- WindowsTooltip.cs
- HttpClientCertificate.cs
- DataGridViewRowsRemovedEventArgs.cs
- IInstanceTable.cs
- ProtocolsConfigurationEntry.cs
- HostingEnvironmentSection.cs
- ScalarOps.cs
- SingleKeyFrameCollection.cs
- RegexCompilationInfo.cs
- PropertyInformationCollection.cs
- SafeUserTokenHandle.cs
- UInt16.cs
- SHA384.cs
- CacheEntry.cs
- XmlPreloadedResolver.cs
- SqlDelegatedTransaction.cs
- SQLInt32Storage.cs
- ServiceEndpointCollection.cs
- KnownTypesHelper.cs
- OrderByQueryOptionExpression.cs
- MatchAllMessageFilter.cs
- precedingquery.cs
- TCEAdapterGenerator.cs
- QueueAccessMode.cs
- QueryOperationResponseOfT.cs
- AccessorTable.cs
- XmlSchemaObjectTable.cs
- StandardBindingOptionalReliableSessionElement.cs
- ObjectQueryProvider.cs
- EtwTrackingParticipant.cs
- RegistryExceptionHelper.cs
- ValueUtilsSmi.cs
- ValueTypeFixupInfo.cs
- TextEndOfSegment.cs
- AttributeParameterInfo.cs
- CorePropertiesFilter.cs
- GridViewRowPresenter.cs
- XmlSchemaGroupRef.cs
- HostedTransportConfigurationManager.cs
- EventHandlerList.cs
- DictionaryContent.cs
- ObjectResult.cs