Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/DispatchR.Abstractions/IMediator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using DispatchR.Abstractions.Notification;
using DispatchR.Abstractions.Send;
using DispatchR.Abstractions.Stream;

namespace DispatchR;

public interface IMediator
{
TResponse Send<TRequest, TResponse>(IRequest<TRequest, TResponse> request,
CancellationToken cancellationToken) where TRequest : class, IRequest;

IAsyncEnumerable<TResponse> CreateStream<TRequest, TResponse>(IStreamRequest<TRequest, TResponse> request,
CancellationToken cancellationToken) where TRequest : class, IStreamRequest;

ValueTask Publish<TNotification>(TNotification request, CancellationToken cancellationToken)
where TNotification : INotification;

/// <summary>
/// This method is not recommended for performance-critical scenarios.
/// Use it only if it is strictly necessary, as its performance is lower compared
/// to similar methods in terms of both memory usage and CPU consumption.
/// </summary>
/// <param name="request">
/// An object that implements INotification
/// </param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[Obsolete(message: "This method has performance issues. Use only if strictly necessary", error: false)]
ValueTask Publish(object request, CancellationToken cancellationToken);
}
40 changes: 13 additions & 27 deletions src/DispatchR/IMediator.cs → src/DispatchR/Mediator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,6 @@

namespace DispatchR;

public interface IMediator
{
TResponse Send<TRequest, TResponse>(IRequest<TRequest, TResponse> request,
CancellationToken cancellationToken) where TRequest : class, IRequest;

IAsyncEnumerable<TResponse> CreateStream<TRequest, TResponse>(IStreamRequest<TRequest, TResponse> request,
CancellationToken cancellationToken) where TRequest : class, IStreamRequest;

ValueTask Publish<TNotification>(TNotification request, CancellationToken cancellationToken)
where TNotification : INotification;

/// <summary>
/// This method is not recommended for performance-critical scenarios.
/// Use it only if it is strictly necessary, as its performance is lower compared
/// to similar methods in terms of both memory usage and CPU consumption.
/// </summary>
/// <param name="request">
/// An object that implements INotification
/// </param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[Obsolete(message: "This method has performance issues. Use only if strictly necessary",
error: false,
DiagnosticId = Constants.DiagnosticPerformanceIssue)]
ValueTask Publish(object request, CancellationToken cancellationToken);
}

public sealed class Mediator(IServiceProvider serviceProvider) : IMediator
{
public TResponse Send<TRequest, TResponse>(IRequest<TRequest, TResponse> request,
Expand Down Expand Up @@ -73,6 +46,19 @@ public async ValueTask Publish<TNotification>(TNotification request, Cancellatio
}
}

/// <summary>
/// This method is not recommended for performance-critical scenarios.
/// Use it only if it is strictly necessary, as its performance is lower compared
/// to similar methods in terms of both memory usage and CPU consumption.
/// </summary>
/// <param name="request">
/// An object that implements INotification
/// </param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[Obsolete(message: "This method has performance issues. Use only if strictly necessary",
error: false,
DiagnosticId = Constants.DiagnosticPerformanceIssue)]
public async ValueTask Publish(object request, CancellationToken cancellationToken)
{
ArgumentNullException.ThrowIfNull(request);
Expand Down
3 changes: 3 additions & 0 deletions src/DispatchR/TypeForwarders.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using System.Runtime.CompilerServices;

[assembly:TypeForwardedTo(typeof(DispatchR.IMediator))]