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
- Currency.cs
- WebPart.cs
- log.cs
- WinInet.cs
- BaseComponentEditor.cs
- SmtpNegotiateAuthenticationModule.cs
- StatusBarItemAutomationPeer.cs
- GeneralTransform3D.cs
- _SafeNetHandles.cs
- ListBox.cs
- MDIClient.cs
- EventHandlerService.cs
- Int32Converter.cs
- xmlNames.cs
- TextServicesCompartmentEventSink.cs
- MailWriter.cs
- EmptyTextWriter.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- ManagementNamedValueCollection.cs
- DuplicateWaitObjectException.cs
- WeakReference.cs
- DataContractJsonSerializerOperationFormatter.cs
- InstanceLockLostException.cs
- NonSerializedAttribute.cs
- ElapsedEventArgs.cs
- IgnoreDeviceFilterElementCollection.cs
- _CommandStream.cs
- SafeEventLogWriteHandle.cs
- DiscoveryDefaults.cs
- MethodExpression.cs
- future.cs
- Control.cs
- TimeoutValidationAttribute.cs
- XmlBindingWorker.cs
- HandlerWithFactory.cs
- OdbcConnectionStringbuilder.cs
- FixedTextPointer.cs
- VirtualDirectoryMappingCollection.cs
- BitmapEffectDrawingContent.cs
- ActivityScheduledRecord.cs
- MimeMultiPart.cs
- StretchValidation.cs
- VisemeEventArgs.cs
- PrintPreviewDialog.cs
- FontWeight.cs
- DataGridViewCellCancelEventArgs.cs
- XmlSubtreeReader.cs
- BinaryConverter.cs
- GroupBox.cs
- DESCryptoServiceProvider.cs
- AssemblyName.cs
- ImplicitInputBrush.cs
- UIElementParagraph.cs
- ChooseAction.cs
- OdbcParameterCollection.cs
- AppDomainManager.cs
- PeerCollaborationPermission.cs
- Message.cs
- JpegBitmapDecoder.cs
- ProfessionalColorTable.cs
- VoiceObjectToken.cs
- TranslateTransform.cs
- GraphicsPathIterator.cs
- Error.cs
- CursorInteropHelper.cs
- DetailsViewInsertedEventArgs.cs
- Trace.cs
- UnsafeNativeMethods.cs
- RuleSettings.cs
- TrackingServices.cs
- MailMessageEventArgs.cs
- SqlCachedBuffer.cs
- XpsPackagingException.cs
- ValidationError.cs
- XsltInput.cs
- DataError.cs
- DescendentsWalker.cs
- EventDescriptor.cs
- OperandQuery.cs
- DeviceSpecificDesigner.cs
- TextParagraph.cs
- UIElementPropertyUndoUnit.cs
- URLIdentityPermission.cs
- WebBrowserEvent.cs
- ConstNode.cs
- OracleTimeSpan.cs
- Timer.cs
- SoapCodeExporter.cs
- MemberRestriction.cs
- ChtmlCommandAdapter.cs
- Attachment.cs
- SharedDp.cs
- SortFieldComparer.cs
- XmlSchemaGroupRef.cs
- OdbcError.cs
- CodeVariableDeclarationStatement.cs
- CopyOfAction.cs
- ShapingEngine.cs
- PersistenceTypeAttribute.cs
- EventMetadata.cs