From 95058d2e1c171b06762e28e90638d0c953994a4a Mon Sep 17 00:00:00 2001 From: Ivan Paulovich Date: Sun, 3 Nov 2019 23:05:42 +0100 Subject: [PATCH] CancellableToken and Docs --- changelog.md | 5 ++ ...soft.Extensions.DependencyInjection.csproj | 5 +- .../FluentMediatorExtensions.cs | 21 ++++++ src/FluentMediator/FluentMediator.csproj | 5 +- src/FluentMediator/GetService.cs | 5 ++ src/FluentMediator/IMediator.cs | 14 +++- src/FluentMediator/IPipelineProvider.cs | 14 +++- .../IPipelineProviderBuilder.cs | 23 ++++++- src/FluentMediator/Mediator.cs | 66 +++++++++++++++++-- src/FluentMediator/MediatorException.cs | 10 ++- src/FluentMediator/NullRequestException.cs | 12 +++- src/FluentMediator/PipelineProvider.cs | 39 +++++++++++ src/FluentMediator/PipelineProviderBuilder.cs | 32 ++++++++- .../ICancellableMediator.cs | 30 +++++++++ .../ICancellablePipelineAsync.cs | 19 ++++++ .../ICancellablePipelineAsyncBuilder.cs | 25 +++++++ .../ICancellablePipelineProvider.cs | 24 +++++++ .../ICancellablePipelineProviderBuilder.cs | 15 +++++ .../CancellablePipelineAsync/IDirect.cs | 8 ++- .../CancellablePipelineAsync/IMediator.cs | 11 ---- .../IPipelineProvider.cs | 10 --- .../IPipelineProviderBuilder.cs | 7 -- .../CancellablePipelineAsync/Pipeline.cs | 11 +++- .../Pipelines/INamedPipeline.cs | 7 ++ .../Pipelines/IPipelineBehavior.cs | 21 ++++++ .../Pipelines/IPipelineCollection.cs | 13 ++-- .../Pipelines/ITypedPipeline.cs | 7 ++ .../Pipelines/Pipeline/IDirect.cs | 7 +- .../Pipelines/Pipeline/IMediator.cs | 8 --- .../Pipelines/Pipeline/IPipeline.cs | 16 +++++ .../Pipelines/Pipeline/IPipelineBuilder.cs | 25 +++++++ .../Pipelines/Pipeline/IPipelineProvider.cs | 10 --- .../Pipeline/IPipelineProviderBuilder.cs | 7 -- .../Pipelines/Pipeline/ISyncMediator.cs | 24 +++++++ .../Pipeline/ISyncPipelineProvider.cs | 24 +++++++ .../Pipeline/ISyncPipelineProviderBuilder.cs | 15 +++++ .../PipelineAlreadyExistsException.cs | 10 ++- .../Pipelines/PipelineAsync/IAsyncMediator.cs | 27 ++++++++ .../PipelineAsync/IAsyncPipelineProvider.cs | 24 +++++++ .../IAsyncPipelineProviderBuilder.cs | 15 +++++ .../Pipelines/PipelineAsync/IDirect.cs | 5 +- .../Pipelines/PipelineAsync/IMediator.cs | 10 --- .../Pipelines/PipelineAsync/IPipelineAsync.cs | 17 +++++ .../PipelineAsync/IPipelineAsyncBuilder.cs | 25 +++++++ .../PipelineAsync/IPipelineProvider.cs | 10 --- .../PipelineAsync/IPipelineProviderBuilder.cs | 7 -- .../Pipelines/PipelineNotFoundException.cs | 10 ++- .../ReturnFunctionIsNullException.cs | 10 ++- 48 files changed, 640 insertions(+), 125 deletions(-) create mode 100644 src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellableMediator.cs create mode 100644 src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProvider.cs create mode 100644 src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProviderBuilder.cs delete mode 100644 src/FluentMediator/Pipelines/CancellablePipelineAsync/IMediator.cs delete mode 100644 src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProvider.cs delete mode 100644 src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProviderBuilder.cs delete mode 100644 src/FluentMediator/Pipelines/Pipeline/IMediator.cs delete mode 100644 src/FluentMediator/Pipelines/Pipeline/IPipelineProvider.cs delete mode 100644 src/FluentMediator/Pipelines/Pipeline/IPipelineProviderBuilder.cs create mode 100644 src/FluentMediator/Pipelines/Pipeline/ISyncMediator.cs create mode 100644 src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProvider.cs create mode 100644 src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProviderBuilder.cs create mode 100644 src/FluentMediator/Pipelines/PipelineAsync/IAsyncMediator.cs create mode 100644 src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProvider.cs create mode 100644 src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProviderBuilder.cs delete mode 100644 src/FluentMediator/Pipelines/PipelineAsync/IMediator.cs delete mode 100644 src/FluentMediator/Pipelines/PipelineAsync/IPipelineProvider.cs delete mode 100644 src/FluentMediator/Pipelines/PipelineAsync/IPipelineProviderBuilder.cs diff --git a/changelog.md b/changelog.md index 17b9a0b..e9ebdf2 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ # Change Log +## 2019-10-20 - 0.4.6 + +* #25 Cancellation Token fixed. +* Added XML docs. + ## 2019-10-20 - 0.4.5 * #37 Validation for Null Requests added. diff --git a/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediator.Microsoft.Extensions.DependencyInjection.csproj b/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediator.Microsoft.Extensions.DependencyInjection.csproj index f584612..8328356 100644 --- a/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediator.Microsoft.Extensions.DependencyInjection.csproj +++ b/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediator.Microsoft.Extensions.DependencyInjection.csproj @@ -2,11 +2,12 @@ netstandard1.1 + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml FluentMediator.Microsoft.Extensions.DependencyInjection - 0.4.5 + 0.4.6 Ivan Paulovich Ivan Paulovich Microsoft Extensions for FluentMediator. @@ -19,7 +20,7 @@ - + diff --git a/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediatorExtensions.cs b/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediatorExtensions.cs index 8523b61..b90061a 100644 --- a/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediatorExtensions.cs +++ b/src/FluentMediator.Microsoft.Extensions.DependencyInjection/FluentMediatorExtensions.cs @@ -3,8 +3,17 @@ namespace FluentMediator { + /// + /// FluentMediatorExtensions + /// public static class FluentMediatorExtensions { + /// + /// Adds the FluentMediator + /// + /// The ServiceCollection + /// Builder + /// The changed ServiceCollection public static IServiceCollection AddFluentMediator(this IServiceCollection services, Action setupAction) { var pipelineProviderBuilder = new PipelineProviderBuilder(); @@ -18,6 +27,12 @@ public static IServiceCollection AddFluentMediator(this IServiceCollection servi return services; } + /// + /// Adds the FluentMediator + /// + /// The ServiceCollection + /// Builder + /// The changed ServiceCollection public static IServiceCollection AddSingletonFluentMediator( this IServiceCollection services, Action setupAction) @@ -33,6 +48,12 @@ public static IServiceCollection AddFluentMediator(this IServiceCollection servi return services;; } + /// + /// Adds the FluentMediator + /// + /// The ServiceCollection + /// Builder + /// The changed ServiceCollection public static IServiceCollection AddScopedFluentMediator( this IServiceCollection services, Action setupAction) diff --git a/src/FluentMediator/FluentMediator.csproj b/src/FluentMediator/FluentMediator.csproj index 163e50f..a45f8df 100644 --- a/src/FluentMediator/FluentMediator.csproj +++ b/src/FluentMediator/FluentMediator.csproj @@ -6,11 +6,12 @@ true 8.0 true + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml FluentMediator - 0.4.5 + 0.4.6 Ivan Paulovich Ivan Paulovich FluentMediator is an unobtrusive library that allows developers to build custom pipelines for Commands, Queries and Events. @@ -23,7 +24,7 @@ - + diff --git a/src/FluentMediator/GetService.cs b/src/FluentMediator/GetService.cs index b095eea..fba6991 100644 --- a/src/FluentMediator/GetService.cs +++ b/src/FluentMediator/GetService.cs @@ -2,5 +2,10 @@ namespace FluentMediator { + /// + /// Retrieves a Handler Service from the Container + /// + /// + /// public delegate object GetService(Type serviceType); } \ No newline at end of file diff --git a/src/FluentMediator/IMediator.cs b/src/FluentMediator/IMediator.cs index d51d6e6..c278dc0 100644 --- a/src/FluentMediator/IMediator.cs +++ b/src/FluentMediator/IMediator.cs @@ -1,6 +1,14 @@ +using FluentMediator.Pipelines.CancellablePipelineAsync; +using FluentMediator.Pipelines.Pipeline; +using FluentMediator.Pipelines.PipelineAsync; + namespace FluentMediator { - public interface IMediator : Pipelines.Pipeline.IMediator, - Pipelines.PipelineAsync.IMediator, - Pipelines.CancellablePipelineAsync.IMediator { } + /// + /// Publishes/Sends messages through the Pipelines + /// + public interface IMediator: + ISyncMediator, + IAsyncMediator, + ICancellableMediator { } } \ No newline at end of file diff --git a/src/FluentMediator/IPipelineProvider.cs b/src/FluentMediator/IPipelineProvider.cs index be0ef95..3aca450 100644 --- a/src/FluentMediator/IPipelineProvider.cs +++ b/src/FluentMediator/IPipelineProvider.cs @@ -1,6 +1,14 @@ +using FluentMediator.Pipelines.CancellablePipelineAsync; +using FluentMediator.Pipelines.Pipeline; +using FluentMediator.Pipelines.PipelineAsync; + namespace FluentMediator { - public interface IPipelineProvider : Pipelines.Pipeline.IPipelineProvider, - Pipelines.PipelineAsync.IPipelineProvider, - Pipelines.CancellablePipelineAsync.IPipelineProvider { } + /// + /// Retrieves a Pipeline for a specific Message + /// + public interface IPipelineProvider: + ISyncPipelineProvider, + IAsyncPipelineProvider, + ICancellablePipelineProvider { } } \ No newline at end of file diff --git a/src/FluentMediator/IPipelineProviderBuilder.cs b/src/FluentMediator/IPipelineProviderBuilder.cs index 7d4b984..dae9e94 100644 --- a/src/FluentMediator/IPipelineProviderBuilder.cs +++ b/src/FluentMediator/IPipelineProviderBuilder.cs @@ -1,12 +1,29 @@ using FluentMediator.Pipelines; +using FluentMediator.Pipelines.CancellablePipelineAsync; +using FluentMediator.Pipelines.Pipeline; +using FluentMediator.Pipelines.PipelineAsync; namespace FluentMediator { - public interface IPipelineProviderBuilder : Pipelines.Pipeline.IPipelineProviderBuilder, - Pipelines.PipelineAsync.IPipelineProviderBuilder, - Pipelines.CancellablePipelineAsync.IPipelineProviderBuilder + /// + /// Builds pipelines for a specific message + /// + public interface IPipelineProviderBuilder: + ISyncPipelineProviderBuilder, + IAsyncPipelineProviderBuilder, + ICancellablePipelineProviderBuilder { + /// + /// Begin building a pipeline for a specific message + /// + /// Message Type + /// A more specific PipelineBehavior IPipelineBehavior On(); + + /// + /// Builds the pipeline + /// + /// An immutable Pipeline Provider IPipelineProvider Build(); } } \ No newline at end of file diff --git a/src/FluentMediator/Mediator.cs b/src/FluentMediator/Mediator.cs index 84fa3d1..6ddcce9 100644 --- a/src/FluentMediator/Mediator.cs +++ b/src/FluentMediator/Mediator.cs @@ -3,11 +3,23 @@ namespace FluentMediator { + /// + /// Publishes/Sends messages through the Pipelines + /// public sealed class Mediator : IMediator { + /// + /// Returns a service from the Container + /// + /// public GetService GetService { get; } private IPipelineProvider _pipelines; + /// + /// Instantiate a Mediator + /// + /// Service Provider + /// Pipeline Provider public Mediator( GetService getService, IPipelineProvider pipelines) @@ -16,13 +28,18 @@ public sealed class Mediator : IMediator _pipelines = pipelines; } + /// + /// Publishes messages through the Pipeline + /// + /// Message + /// An optional pipeline name public void Publish(object request, string? pipelineName = null) { if (request is null) { throw new NullRequestException("The request is null."); } - + if (pipelineName is string) { var pipeline = _pipelines.GetPipeline(pipelineName); @@ -36,6 +53,13 @@ public void Publish(object request, string? pipelineName = null) } } + /// + /// Publishes messages through the Pipeline + /// + /// Message + /// An optional pipeline name + /// The desired Typed result + /// The result object public TResult Send(object request, string? pipelineName = null) { if (request is null) @@ -55,6 +79,12 @@ public TResult Send(object request, string? pipelineName = null) } } + /// + /// Publishes messages through the Pipeline + /// + /// Message + /// An optional pipeline name + /// Task object public async Task PublishAsync(object request, string? pipelineName = null) { if (request is null) @@ -74,6 +104,13 @@ public async Task PublishAsync(object request, string? pipelineName = null) } } + /// + /// Publishes messages through the Pipeline + /// + /// Message + /// An optional pipeline name + /// The desired Typed result + /// The result object public async Task SendAsync(object request, string? pipelineName = null) { if (request is null) @@ -93,7 +130,14 @@ public async Task SendAsync(object request, string? pipelineNa } } - public async Task PublishAsync(object request, CancellationToken ct, string? pipelineName = null) + /// + /// Publishes messages through the Pipeline + /// + /// Message + /// Cancellation Token to gracefully exit in middle of execution + /// Optional Pipeline Name + /// Task object + public async Task PublishAsync(object request, CancellationToken cancellationToken, string? pipelineName = null) { if (request is null) { @@ -103,16 +147,24 @@ public async Task PublishAsync(object request, CancellationToken ct, string? pip if (pipelineName is string) { var pipeline = _pipelines.GetCancellablePipeline(pipelineName); - await pipeline.PublishAsync(GetService, request, ct); + await pipeline.PublishAsync(GetService, request, cancellationToken); } else { var pipeline = _pipelines.GetCancellablePipeline(request.GetType()); - await pipeline.PublishAsync(GetService, request, ct); + await pipeline.PublishAsync(GetService, request, cancellationToken); } } - public async Task SendAsync(object request, CancellationToken ct, string? pipelineName = null) + /// + /// Sends messages through the Pipeline + /// + /// Message + /// Cancellation Token to gracefully exit in middle of execution + /// Optional Pipeline Name + /// Result Type + /// Result object + public async Task SendAsync(object request, CancellationToken cancellationToken, string? pipelineName = null) { if (request is null) { @@ -122,12 +174,12 @@ public async Task SendAsync(object request, CancellationToken if (pipelineName is string) { var pipeline = _pipelines.GetCancellablePipeline(pipelineName); - return await pipeline.SendAsync(GetService, request, ct); + return await pipeline.SendAsync(GetService, request, cancellationToken); } else { var pipeline = _pipelines.GetCancellablePipeline(request.GetType()); - return await pipeline.SendAsync(GetService, request, ct); + return await pipeline.SendAsync(GetService, request, cancellationToken); } } } diff --git a/src/FluentMediator/MediatorException.cs b/src/FluentMediator/MediatorException.cs index 80df6a7..51d8a8a 100644 --- a/src/FluentMediator/MediatorException.cs +++ b/src/FluentMediator/MediatorException.cs @@ -2,10 +2,16 @@ namespace FluentMediator { + /// + /// All Exceptions from FluentMediator are derived from MediatorException + /// public class MediatorException : Exception { - public MediatorException() { } + /// + /// Instantiate a MediatorException + /// + /// Error message + /// The exception public MediatorException(string message) : base(message) { } - public MediatorException(string message, System.Exception inner) : base(message, inner) { } } } \ No newline at end of file diff --git a/src/FluentMediator/NullRequestException.cs b/src/FluentMediator/NullRequestException.cs index 7120291..d71acae 100644 --- a/src/FluentMediator/NullRequestException.cs +++ b/src/FluentMediator/NullRequestException.cs @@ -1,9 +1,15 @@ namespace FluentMediator { - public class NullRequestException: MediatorException + /// + /// Occurs when the message is null + /// + public class NullRequestException : MediatorException { - public NullRequestException() { } + /// + /// Instantiate an Exception + /// + /// The message + /// An Exception instance public NullRequestException(string message) : base(message) { } - public NullRequestException(string message, System.Exception inner) : base(message, inner) { } } } \ No newline at end of file diff --git a/src/FluentMediator/PipelineProvider.cs b/src/FluentMediator/PipelineProvider.cs index 9af0e2c..8c9a68f 100644 --- a/src/FluentMediator/PipelineProvider.cs +++ b/src/FluentMediator/PipelineProvider.cs @@ -6,12 +6,21 @@ namespace FluentMediator { + /// + /// Retrieves Pipelines for a message + /// internal sealed class PipelineProvider : IPipelineProvider { private readonly IPipelineCollection _pipelineCollection; private readonly IPipelineCollection _asyncPipelineCollection; private readonly IPipelineCollection _cancellablePipelineCollection; + /// + /// Instantiate a PipelineProvider + /// + /// Sync Pipelines + /// Async Pipelines + /// Cancellable Pipelines public PipelineProvider( IPipelineCollection pipelineCollection, IPipelineCollection asyncPipelineCollection, @@ -22,31 +31,61 @@ internal sealed class PipelineProvider : IPipelineProvider _cancellablePipelineCollection = cancellablePipelineCollection; } + /// + /// Gets an async pipeline + /// + /// Message Type + /// Pipeline public IPipelineAsync GetAsyncPipeline(Type requestType) { return _asyncPipelineCollection.Get(requestType); } + /// + /// Gets an async pipeline + /// + /// Pipeline Name + /// Pipeline public IPipelineAsync GetAsyncPipeline(string pipelineName) { return _asyncPipelineCollection.Get(pipelineName); } + /// + /// Gets a cancellable pipeline + /// + /// Request Type + /// Pipeline public ICancellablePipelineAsync GetCancellablePipeline(Type requestType) { return _cancellablePipelineCollection.Get(requestType); } + /// + /// Gets a cancellable pipeline + /// + /// Pipeline Name + /// Pipeline public ICancellablePipelineAsync GetCancellablePipeline(string pipelineName) { return _cancellablePipelineCollection.Get(pipelineName); } + /// + /// Gets a Pipeline + /// + /// Request Type + /// Pipeline public IPipeline GetPipeline(Type requestType) { return _pipelineCollection.Get(requestType); } + /// + /// Gets a Pipeline + /// + /// Pipeline Name + /// Pipeline public IPipeline GetPipeline(string pipelineName) { return _pipelineCollection.Get(pipelineName); diff --git a/src/FluentMediator/PipelineProviderBuilder.cs b/src/FluentMediator/PipelineProviderBuilder.cs index 960657f..4f7649b 100644 --- a/src/FluentMediator/PipelineProviderBuilder.cs +++ b/src/FluentMediator/PipelineProviderBuilder.cs @@ -7,12 +7,18 @@ namespace FluentMediator { - public sealed class PipelineProviderBuilder : IPipelineProviderBuilder + /// + /// PipelineProvider Builder + /// + public class PipelineProviderBuilder : IPipelineProviderBuilder { private ICollection _pipelineBuilderCollection { get; } private ICollection _asyncPipelineBuilderCollection { get; } private ICollection _cancellablePipelineBuilderCollection { get; } + /// + /// Instantiate a PipelineProviderBuilder + /// public PipelineProviderBuilder() { _pipelineBuilderCollection = new Collection(); @@ -20,30 +26,54 @@ public PipelineProviderBuilder() _cancellablePipelineBuilderCollection = new Collection(); } + /// + /// Returns a PipelineBehavior for a Message Type + /// + /// MessageType + /// PipelineBehavior public IPipelineBehavior On() { var behavior = new PipelineBehavior(this); return behavior; } + /// + /// Adds a Pipeline + /// + /// PipelineBuilder + /// PipelineBuilder public IPipelineBuilder Add(IPipelineBuilder pipelineBuilder) { _pipelineBuilderCollection.Add(pipelineBuilder); return pipelineBuilder; } + /// + /// Adds a Pipeline + /// + /// PipelineBuilder + /// PipelineBuilder public IPipelineAsyncBuilder Add(IPipelineAsyncBuilder pipelineBuilder) { _asyncPipelineBuilderCollection.Add(pipelineBuilder); return pipelineBuilder; } + /// + /// Adds a Pipeline + /// + /// PipelineBuilder + /// PipelineBuilder public ICancellablePipelineAsyncBuilder Add(ICancellablePipelineAsyncBuilder pipelineBuilder) { _cancellablePipelineBuilderCollection.Add(pipelineBuilder); return pipelineBuilder; } + /// + /// Builds a PipelineProvider + /// + /// Returns a immutable PipelineProvider public IPipelineProvider Build() { var pipelineCollection = new PipelineCollection(); diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellableMediator.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellableMediator.cs new file mode 100644 index 0000000..463584b --- /dev/null +++ b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellableMediator.cs @@ -0,0 +1,30 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace FluentMediator.Pipelines.CancellablePipelineAsync +{ + /// + /// Cancellable Mediator + /// + public interface ICancellableMediator + { + /// + /// Publishes a message + /// + /// A message + /// Cancellation Token + /// Pipeline Name + /// Task object + Task PublishAsync(object request, CancellationToken cancellationToken, string? pipelineName = null); + + /// + /// Sends a message + /// + /// A message + /// Cancellation Token + /// Pipeline Name + /// Result Type + /// + Task SendAsync(object request, CancellationToken cancellationToken, string? pipelineName = null); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsync.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsync.cs index afd1fea..662f43c 100644 --- a/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsync.cs +++ b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsync.cs @@ -3,9 +3,28 @@ namespace FluentMediator.Pipelines.CancellablePipelineAsync { + /// + /// Cancellable Pipeline + /// public interface ICancellablePipelineAsync : INamedPipeline, ITypedPipeline { + /// + /// Publishes a message + /// + /// Retriever a service from the container + /// Request message + /// Cancellation Token + /// Task object Task PublishAsync(GetService getService, object request, CancellationToken cancellationToken); + + /// + /// Sends a message + /// + /// Retriever a service from the container + /// Request message + /// Cancellation Token + /// Message type + /// Response message Task SendAsync(GetService getService, object request, CancellationToken cancellationToken); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsyncBuilder.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsyncBuilder.cs index 7fe042c..c530d51 100644 --- a/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsyncBuilder.cs +++ b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineAsyncBuilder.cs @@ -4,14 +4,39 @@ namespace FluentMediator.Pipelines.CancellablePipelineAsync { + /// + /// Cancellable Pipeline + /// + /// public interface ICancellablePipelineAsyncBuilder : ICancellablePipelineAsyncBuilder { + /// + /// + /// + /// + /// + /// ICancellablePipelineAsyncBuilder Call(Func func); + + /// + /// + /// + /// + /// + /// + /// ICancellablePipelineAsync Return(Func> func); } + /// + /// + /// public interface ICancellablePipelineAsyncBuilder { + /// + /// + /// + /// ICancellablePipelineAsync Build(); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProvider.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProvider.cs new file mode 100644 index 0000000..e4bb75a --- /dev/null +++ b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProvider.cs @@ -0,0 +1,24 @@ +using System; + +namespace FluentMediator.Pipelines.CancellablePipelineAsync +{ + /// + /// + /// + public interface ICancellablePipelineProvider + { + /// + /// + /// + /// + /// + ICancellablePipelineAsync GetCancellablePipeline(Type requestType); + + /// + /// + /// + /// + /// + ICancellablePipelineAsync GetCancellablePipeline(string pipelineName); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProviderBuilder.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProviderBuilder.cs new file mode 100644 index 0000000..8c1f36d --- /dev/null +++ b/src/FluentMediator/Pipelines/CancellablePipelineAsync/ICancellablePipelineProviderBuilder.cs @@ -0,0 +1,15 @@ +namespace FluentMediator.Pipelines.CancellablePipelineAsync +{ + /// + /// + /// + public interface ICancellablePipelineProviderBuilder + { + /// + /// + /// + /// + /// + ICancellablePipelineAsyncBuilder Add(ICancellablePipelineAsyncBuilder pipelineBuilder); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IDirect.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/IDirect.cs index b1a01ff..1694c6b 100644 --- a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IDirect.cs +++ b/src/FluentMediator/Pipelines/CancellablePipelineAsync/IDirect.cs @@ -3,8 +3,12 @@ namespace FluentMediator.Pipelines.CancellablePipelineAsync { - public interface IDirect + internal interface IDirect { - Task SendAsync(GetService getService, object request, CancellationToken cancellationToken); + Task SendAsync( + GetService getService, + object request, + CancellationToken cancellationToken + ); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IMediator.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/IMediator.cs deleted file mode 100644 index 87f0191..0000000 --- a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IMediator.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Threading; -using System.Threading.Tasks; - -namespace FluentMediator.Pipelines.CancellablePipelineAsync -{ - public interface IMediator - { - Task PublishAsync(object request, CancellationToken ct, string? pipelineName = null); - Task SendAsync(object request, CancellationToken ct, string? pipelineName = null); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProvider.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProvider.cs deleted file mode 100644 index fe3dfc7..0000000 --- a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProvider.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace FluentMediator.Pipelines.CancellablePipelineAsync -{ - public interface IPipelineProvider - { - ICancellablePipelineAsync GetCancellablePipeline(Type requestType); - ICancellablePipelineAsync GetCancellablePipeline(string pipelineName); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProviderBuilder.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProviderBuilder.cs deleted file mode 100644 index 6c84a79..0000000 --- a/src/FluentMediator/Pipelines/CancellablePipelineAsync/IPipelineProviderBuilder.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace FluentMediator.Pipelines.CancellablePipelineAsync -{ - public interface IPipelineProviderBuilder - { - ICancellablePipelineAsyncBuilder Add(ICancellablePipelineAsyncBuilder pipelineBuilder); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/CancellablePipelineAsync/Pipeline.cs b/src/FluentMediator/Pipelines/CancellablePipelineAsync/Pipeline.cs index 02ad739..e7608b1 100644 --- a/src/FluentMediator/Pipelines/CancellablePipelineAsync/Pipeline.cs +++ b/src/FluentMediator/Pipelines/CancellablePipelineAsync/Pipeline.cs @@ -9,7 +9,10 @@ internal sealed class Pipeline : ICancellablePipelineAsync private readonly IMethodCollection>> _methods; private readonly IDirect? _direct; - public Pipeline(IMethodCollection>> methods, IDirect? direct, Type requestType, string? name) + public Pipeline(IMethodCollection>> methods, + IDirect? direct, + Type requestType, + string? name) { _methods = methods; _direct = direct; @@ -24,6 +27,8 @@ public async Task PublishAsync(GetService getService, object request, Cancellati { foreach (var handler in _methods.GetMethods()) { + cancellationToken.ThrowIfCancellationRequested(); + var concreteHandler = getService(handler.HandlerType); await handler.Action(concreteHandler, request, cancellationToken); } @@ -38,10 +43,14 @@ public async Task SendAsync(GetService getService, object requ foreach (var handler in _methods.GetMethods()) { + cancellationToken.ThrowIfCancellationRequested(); + var concreteHandler = getService(handler.HandlerType); await handler.Action(concreteHandler, request, cancellationToken); } + cancellationToken.ThrowIfCancellationRequested(); + return await _direct.SendAsync(getService, request!, cancellationToken) !; } } diff --git a/src/FluentMediator/Pipelines/INamedPipeline.cs b/src/FluentMediator/Pipelines/INamedPipeline.cs index caa25c0..a94e02e 100644 --- a/src/FluentMediator/Pipelines/INamedPipeline.cs +++ b/src/FluentMediator/Pipelines/INamedPipeline.cs @@ -1,7 +1,14 @@ namespace FluentMediator.Pipelines { + /// + /// Named Pipeline + /// public interface INamedPipeline { + /// + /// An unique pipeline name + /// + /// null string? Name { get; } } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/IPipelineBehavior.cs b/src/FluentMediator/Pipelines/IPipelineBehavior.cs index 529b1ff..19e3071 100644 --- a/src/FluentMediator/Pipelines/IPipelineBehavior.cs +++ b/src/FluentMediator/Pipelines/IPipelineBehavior.cs @@ -4,10 +4,31 @@ namespace FluentMediator.Pipelines { + /// + /// PipelineBehavior + /// + /// public interface IPipelineBehavior { + /// + /// Creates a IPipelineBuilder + /// + /// An unique name or null + /// IPipelineBuilder IPipelineBuilder Pipeline(string? pipelineName = null); + + /// + /// Creates an IPipelineAsyncBuilder + /// + /// An unique name or null + /// IPipelineAsyncBuilder IPipelineAsyncBuilder PipelineAsync(string? pipelineName = null); + + /// + /// Creates an ICancellablePipelineAsyncBuilder + /// + /// An unique name or null + /// ICancellablePipelineAsyncBuilder ICancellablePipelineAsyncBuilder CancellablePipelineAsync(string? pipelineName = null); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/IPipelineCollection.cs b/src/FluentMediator/Pipelines/IPipelineCollection.cs index fcbb12d..7902393 100644 --- a/src/FluentMediator/Pipelines/IPipelineCollection.cs +++ b/src/FluentMediator/Pipelines/IPipelineCollection.cs @@ -2,11 +2,10 @@ namespace FluentMediator.Pipelines { - public interface IPipelineCollection - where TPipeline : class, ITypedPipeline - { - void Add(TPipeline pipeline); - TPipeline Get(Type requestType); - TPipeline Get(string pipelineName); - } + internal interface IPipelineCollection where TPipeline : class, ITypedPipeline + { + void Add(TPipeline pipeline); + TPipeline Get(Type requestType); + TPipeline Get(string pipelineName); + } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/ITypedPipeline.cs b/src/FluentMediator/Pipelines/ITypedPipeline.cs index a8d68fb..fc55c43 100644 --- a/src/FluentMediator/Pipelines/ITypedPipeline.cs +++ b/src/FluentMediator/Pipelines/ITypedPipeline.cs @@ -2,8 +2,15 @@ namespace FluentMediator.Pipelines { + /// + /// A Typed Pipeline + /// public interface ITypedPipeline { + /// + /// A RequestType + /// + /// Type RequestType { get; } } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/IDirect.cs b/src/FluentMediator/Pipelines/Pipeline/IDirect.cs index 8163a37..3710386 100644 --- a/src/FluentMediator/Pipelines/Pipeline/IDirect.cs +++ b/src/FluentMediator/Pipelines/Pipeline/IDirect.cs @@ -1,7 +1,10 @@ namespace FluentMediator.Pipelines.Pipeline { - public interface IDirect + internal interface IDirect { - TResult Send(GetService getService, object request); + TResult Send( + GetService getService, + object request + ); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/IMediator.cs b/src/FluentMediator/Pipelines/Pipeline/IMediator.cs deleted file mode 100644 index 244355f..0000000 --- a/src/FluentMediator/Pipelines/Pipeline/IMediator.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace FluentMediator.Pipelines.Pipeline -{ - public interface IMediator - { - void Publish(object request, string? pipelineName = null); - TResult Send(object request, string? pipelineName = null); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/IPipeline.cs b/src/FluentMediator/Pipelines/Pipeline/IPipeline.cs index 018764c..5f8a1f6 100644 --- a/src/FluentMediator/Pipelines/Pipeline/IPipeline.cs +++ b/src/FluentMediator/Pipelines/Pipeline/IPipeline.cs @@ -1,8 +1,24 @@ namespace FluentMediator.Pipelines.Pipeline { + /// + /// + /// public interface IPipeline : INamedPipeline, ITypedPipeline { + /// + /// + /// + /// + /// void Publish(GetService getService, object request); + + /// + /// + /// + /// + /// + /// + /// TResult Send(GetService getService, object request); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/IPipelineBuilder.cs b/src/FluentMediator/Pipelines/Pipeline/IPipelineBuilder.cs index 1e8c0d6..37dbd1e 100644 --- a/src/FluentMediator/Pipelines/Pipeline/IPipelineBuilder.cs +++ b/src/FluentMediator/Pipelines/Pipeline/IPipelineBuilder.cs @@ -2,14 +2,39 @@ namespace FluentMediator.Pipelines.Pipeline { + /// + /// + /// + /// public interface IPipelineBuilder : IPipelineBuilder { + /// + /// + /// + /// + /// + /// IPipelineBuilder Call(Action action); + + /// + /// + /// + /// + /// + /// + /// IPipeline Return(Func func); } + /// + /// + /// public interface IPipelineBuilder { + /// + /// + /// + /// IPipeline Build(); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/IPipelineProvider.cs b/src/FluentMediator/Pipelines/Pipeline/IPipelineProvider.cs deleted file mode 100644 index a00db18..0000000 --- a/src/FluentMediator/Pipelines/Pipeline/IPipelineProvider.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace FluentMediator.Pipelines.Pipeline -{ - public interface IPipelineProvider - { - IPipeline GetPipeline(Type requestType); - IPipeline GetPipeline(string pipelineName); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/IPipelineProviderBuilder.cs b/src/FluentMediator/Pipelines/Pipeline/IPipelineProviderBuilder.cs deleted file mode 100644 index 53f3e1a..0000000 --- a/src/FluentMediator/Pipelines/Pipeline/IPipelineProviderBuilder.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace FluentMediator.Pipelines.Pipeline -{ - public interface IPipelineProviderBuilder - { - IPipelineBuilder Add(IPipelineBuilder pipelineBuilder); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/ISyncMediator.cs b/src/FluentMediator/Pipelines/Pipeline/ISyncMediator.cs new file mode 100644 index 0000000..a22b131 --- /dev/null +++ b/src/FluentMediator/Pipelines/Pipeline/ISyncMediator.cs @@ -0,0 +1,24 @@ +namespace FluentMediator.Pipelines.Pipeline +{ + /// + /// + /// + public interface ISyncMediator + { + /// + /// + /// + /// + /// + void Publish(object request, string? pipelineName = null); + + /// + /// + /// + /// + /// + /// + /// + TResult Send(object request, string? pipelineName = null); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProvider.cs b/src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProvider.cs new file mode 100644 index 0000000..de16aea --- /dev/null +++ b/src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProvider.cs @@ -0,0 +1,24 @@ +using System; + +namespace FluentMediator.Pipelines.Pipeline +{ + /// + /// + /// + public interface ISyncPipelineProvider + { + /// + /// + /// + /// + /// + IPipeline GetPipeline(Type requestType); + + /// + /// + /// + /// + /// + IPipeline GetPipeline(string pipelineName); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProviderBuilder.cs b/src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProviderBuilder.cs new file mode 100644 index 0000000..b5d0ce2 --- /dev/null +++ b/src/FluentMediator/Pipelines/Pipeline/ISyncPipelineProviderBuilder.cs @@ -0,0 +1,15 @@ +namespace FluentMediator.Pipelines.Pipeline +{ + /// + /// + /// + public interface ISyncPipelineProviderBuilder + { + /// + /// + /// + /// + /// + IPipelineBuilder Add(IPipelineBuilder pipelineBuilder); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAlreadyExistsException.cs b/src/FluentMediator/Pipelines/PipelineAlreadyExistsException.cs index 11993ba..4a6052e 100644 --- a/src/FluentMediator/Pipelines/PipelineAlreadyExistsException.cs +++ b/src/FluentMediator/Pipelines/PipelineAlreadyExistsException.cs @@ -1,9 +1,15 @@ namespace FluentMediator.Pipelines { + /// + /// Occurs when pipelines have the same name + /// public sealed class PipelineAlreadyExistsException : MediatorException { - public PipelineAlreadyExistsException() { } + /// + /// Instantiate an PipelineAlreadyExistsException + /// + /// Message + /// PipelineAlreadyExistsException public PipelineAlreadyExistsException(string message) : base(message) { } - public PipelineAlreadyExistsException(string message, System.Exception inner) : base(message, inner) { } } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IAsyncMediator.cs b/src/FluentMediator/Pipelines/PipelineAsync/IAsyncMediator.cs new file mode 100644 index 0000000..497a685 --- /dev/null +++ b/src/FluentMediator/Pipelines/PipelineAsync/IAsyncMediator.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; + +namespace FluentMediator.Pipelines.PipelineAsync +{ + /// + /// + /// + public interface IAsyncMediator + { + /// + /// + /// + /// + /// + /// + Task PublishAsync(object request, string? pipelineName = null); + + /// + /// + /// + /// + /// + /// + /// + Task SendAsync(object request, string? pipelineName = null); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProvider.cs b/src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProvider.cs new file mode 100644 index 0000000..4215715 --- /dev/null +++ b/src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProvider.cs @@ -0,0 +1,24 @@ +using System; + +namespace FluentMediator.Pipelines.PipelineAsync +{ + /// + /// + /// + public interface IAsyncPipelineProvider + { + /// + /// + /// + /// + /// + IPipelineAsync GetAsyncPipeline(Type requestType); + + /// + /// + /// + /// + /// + IPipelineAsync GetAsyncPipeline(string pipelineName); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProviderBuilder.cs b/src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProviderBuilder.cs new file mode 100644 index 0000000..39d5374 --- /dev/null +++ b/src/FluentMediator/Pipelines/PipelineAsync/IAsyncPipelineProviderBuilder.cs @@ -0,0 +1,15 @@ +namespace FluentMediator.Pipelines.PipelineAsync +{ + /// + /// + /// + public interface IAsyncPipelineProviderBuilder + { + /// + /// + /// + /// + /// + IPipelineAsyncBuilder Add(IPipelineAsyncBuilder pipelineBuilder); + } +} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IDirect.cs b/src/FluentMediator/Pipelines/PipelineAsync/IDirect.cs index 34498ee..d38b251 100644 --- a/src/FluentMediator/Pipelines/PipelineAsync/IDirect.cs +++ b/src/FluentMediator/Pipelines/PipelineAsync/IDirect.cs @@ -4,6 +4,9 @@ namespace FluentMediator.Pipelines.PipelineAsync { internal interface IDirect { - Task SendAsync(GetService getService, object request); + Task SendAsync( + GetService getService, + object request + ); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IMediator.cs b/src/FluentMediator/Pipelines/PipelineAsync/IMediator.cs deleted file mode 100644 index 5ecc887..0000000 --- a/src/FluentMediator/Pipelines/PipelineAsync/IMediator.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Threading.Tasks; - -namespace FluentMediator.Pipelines.PipelineAsync -{ - public interface IMediator - { - Task PublishAsync(object request, string? pipelineName = null); - Task SendAsync(object request, string? pipelineName = null); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsync.cs b/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsync.cs index b0e16b0..6486665 100644 --- a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsync.cs +++ b/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsync.cs @@ -2,9 +2,26 @@ namespace FluentMediator.Pipelines.PipelineAsync { + /// + /// + /// public interface IPipelineAsync : INamedPipeline, ITypedPipeline { + /// + /// + /// + /// + /// + /// Task PublishAsync(GetService getService, object request); + + /// + /// + /// + /// + /// + /// + /// Task SendAsync(GetService getService, object request); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsyncBuilder.cs b/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsyncBuilder.cs index a1caf0f..d3d845f 100644 --- a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsyncBuilder.cs +++ b/src/FluentMediator/Pipelines/PipelineAsync/IPipelineAsyncBuilder.cs @@ -3,14 +3,39 @@ namespace FluentMediator.Pipelines.PipelineAsync { + /// + /// + /// + /// public interface IPipelineAsyncBuilder : IPipelineAsyncBuilder { + /// + /// + /// + /// + /// + /// IPipelineAsyncBuilder Call(Func func); + + /// + /// + /// + /// + /// + /// + /// IPipelineAsync Return(Func> func); } + /// + /// + /// public interface IPipelineAsyncBuilder { + /// + /// + /// + /// IPipelineAsync Build(); } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineProvider.cs b/src/FluentMediator/Pipelines/PipelineAsync/IPipelineProvider.cs deleted file mode 100644 index 1befb83..0000000 --- a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineProvider.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace FluentMediator.Pipelines.PipelineAsync -{ - public interface IPipelineProvider - { - IPipelineAsync GetAsyncPipeline(Type requestType); - IPipelineAsync GetAsyncPipeline(string pipelineName); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineProviderBuilder.cs b/src/FluentMediator/Pipelines/PipelineAsync/IPipelineProviderBuilder.cs deleted file mode 100644 index 3ff0ceb..0000000 --- a/src/FluentMediator/Pipelines/PipelineAsync/IPipelineProviderBuilder.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace FluentMediator.Pipelines.PipelineAsync -{ - public interface IPipelineProviderBuilder - { - IPipelineAsyncBuilder Add(IPipelineAsyncBuilder pipelineBuilder); - } -} \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/PipelineNotFoundException.cs b/src/FluentMediator/Pipelines/PipelineNotFoundException.cs index 6bc2056..f9e423f 100644 --- a/src/FluentMediator/Pipelines/PipelineNotFoundException.cs +++ b/src/FluentMediator/Pipelines/PipelineNotFoundException.cs @@ -1,9 +1,15 @@ namespace FluentMediator.Pipelines { + /// + /// Occurs when a pipeline for a message was not found + /// public sealed class PipelineNotFoundException : MediatorException { - public PipelineNotFoundException() { } + /// + /// Instantiate a PipelineNotFoundException + /// + /// The message + /// PipelineNotFoundException public PipelineNotFoundException(string message) : base(message) { } - public PipelineNotFoundException(string message, System.Exception inner) : base(message, inner) { } } } \ No newline at end of file diff --git a/src/FluentMediator/Pipelines/ReturnFunctionIsNullException.cs b/src/FluentMediator/Pipelines/ReturnFunctionIsNullException.cs index 519b1f6..0fe2be9 100644 --- a/src/FluentMediator/Pipelines/ReturnFunctionIsNullException.cs +++ b/src/FluentMediator/Pipelines/ReturnFunctionIsNullException.cs @@ -1,9 +1,15 @@ namespace FluentMediator.Pipelines { + /// + /// Occurs when a return function was not defined + /// public sealed class ReturnFunctionIsNullException : MediatorException { - public ReturnFunctionIsNullException() { } + /// + /// Instantiate the Exception + /// + /// Exception Message + /// An exception public ReturnFunctionIsNullException(string message) : base(message) { } - public ReturnFunctionIsNullException(string message, System.Exception inner) : base(message, inner) { } } } \ No newline at end of file