Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@

messageBus.ConfigureMessageBus(bus =>
{
// Prepend tenant dispatch middleware so every outgoing message carries the tenant header.
bus.PrependDispatch(TenantDispatchMiddleware.Create("acme"));
// Add tenant dispatch middleware so every outgoing message carries the tenant header.
bus.UseDispatch(TenantDispatchMiddleware.Create("acme"));

// Insert logging receive middleware after ReceiveInstrumentation so telemetry spans are
// already open when our middleware runs.
bus.AppendReceive("ReceiveInstrumentation", LoggingReceiveMiddleware.Create());
bus.UseReceive(LoggingReceiveMiddleware.Create(), after: "ReceiveInstrumentation");
Comment thread
PascalSenn marked this conversation as resolved.
});

messageBus
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static class InboxCoreServiceCollectionExtensions
/// <returns>The same <paramref name="builder"/> instance for chaining.</returns>
public static IMessageBusHostBuilder UseInboxCore(this IMessageBusHostBuilder builder)
{
builder.ConfigureMessageBus(x => x.AppendConsume(ConsumeInboxMiddleware.Create()));
builder.ConfigureMessageBus(x => x.UseConsume(ConsumeInboxMiddleware.Create()));
Comment thread
PascalSenn marked this conversation as resolved.

return builder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,13 @@ public interface IMediatorBuilder
IMediatorBuilder ConfigureOptions(Action<MediatorOptions> configure);

/// <summary>
/// Appends a middleware to the end of the pipeline.
/// Adds a middleware to the pipeline. When neither <paramref name="before"/> nor <paramref name="after"/>
/// is specified the middleware is appended to the end of the pipeline.
/// </summary>
IMediatorBuilder Use(MediatorMiddlewareConfiguration middleware);

/// <summary>
/// Inserts a middleware after the middleware identified by <paramref name="after"/>.
/// If no middleware with that key is found, the middleware is appended to the end.
/// </summary>
IMediatorBuilder Append(string after, MediatorMiddlewareConfiguration middleware);

/// <summary>
/// Inserts a middleware at the beginning of the pipeline.
/// </summary>
IMediatorBuilder Prepend(MediatorMiddlewareConfiguration middleware);

/// <summary>
/// Inserts a middleware before the middleware identified by <paramref name="before"/>.
/// If no middleware with that key is found, the middleware is prepended to the beginning.
/// </summary>
IMediatorBuilder Prepend(string before, MediatorMiddlewareConfiguration middleware);
/// <param name="middleware">The middleware configuration.</param>
/// <param name="before">If specified, the middleware is inserted before the middleware with the given key.</param>
/// <param name="after">If specified, the middleware is inserted after the middleware with the given key.</param>
IMediatorBuilder Use(MediatorMiddlewareConfiguration middleware, string? before = null, string? after = null);

Comment thread
PascalSenn marked this conversation as resolved.
/// <summary>
/// Configures the mediator's feature collection.
Expand Down
64 changes: 19 additions & 45 deletions src/Mocha/src/Mocha.Mediator/DependencyInjection/MediatorBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,63 +33,37 @@ public IMediatorBuilder ConfigureOptions(Action<MediatorOptions> configure)
}

/// <inheritdoc />
public IMediatorBuilder Use(MediatorMiddlewareConfiguration middleware)
public IMediatorBuilder Use(MediatorMiddlewareConfiguration middleware, string? before = null, string? after = null)
{
ArgumentNullException.ThrowIfNull(middleware);

_middlewares.Add(middleware);
return this;
}

/// <inheritdoc />
public IMediatorBuilder Append(string after, MediatorMiddlewareConfiguration middleware)
{
ArgumentNullException.ThrowIfNull(after);
ArgumentNullException.ThrowIfNull(middleware);

_pipelineModifiers.Add(pipeline =>
if (before is not null && after is not null)
{
var index = pipeline.FindIndex(m => m.Key == after);

if (index >= 0)
{
pipeline.Insert(index + 1, middleware);
}
else
{
pipeline.Add(middleware);
}
});
return this;
}

/// <inheritdoc />
public IMediatorBuilder Prepend(MediatorMiddlewareConfiguration middleware)
{
ArgumentNullException.ThrowIfNull(middleware);
throw new ArgumentException(
"Only one of 'before' or 'after' can be specified at the same time.");
}

_pipelineModifiers.Add(pipeline => pipeline.Insert(0, middleware));
return this;
}
if (before is null && after is null)
{
_middlewares.Add(middleware);
return this;
}

/// <inheritdoc />
public IMediatorBuilder Prepend(string before, MediatorMiddlewareConfiguration middleware)
{
ArgumentNullException.ThrowIfNull(before);
ArgumentNullException.ThrowIfNull(middleware);
var anchor = (before ?? after)!;

_pipelineModifiers.Add(pipeline =>
{
var index = pipeline.FindIndex(m => m.Key == before);
if (index >= 0)
{
pipeline.Insert(index, middleware);
}
else
var index = pipeline.FindIndex(m => m.Key == anchor);

if (index == -1)
{
pipeline.Insert(0, middleware);
throw new InvalidOperationException(
$"The middleware with the key `{anchor}` was not found.");
}

pipeline.Insert(before is not null ? index : index + 1, middleware);
});

return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,62 +9,19 @@ namespace Mocha.Mediator;
public static class MediatorHostBuilderExtensions
{
/// <summary>
/// Appends a middleware to the end of the pipeline.
/// Adds a middleware to the pipeline. When neither <paramref name="before"/> nor <paramref name="after"/>
/// is specified the middleware is appended to the end of the pipeline.
/// </summary>
public static IMediatorHostBuilder Use(
this IMediatorHostBuilder builder,
MediatorMiddlewareConfiguration middleware)
MediatorMiddlewareConfiguration middleware,
string? before = null,
string? after = null)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(middleware);

builder.ConfigureMediator(b => b.Use(middleware));
return builder;
}

/// <summary>
/// Inserts a middleware after the middleware identified by <paramref name="after"/>.
/// </summary>
public static IMediatorHostBuilder Append(
this IMediatorHostBuilder builder,
string after,
MediatorMiddlewareConfiguration middleware)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(after);
ArgumentNullException.ThrowIfNull(middleware);

builder.ConfigureMediator(b => b.Append(after, middleware));
return builder;
}

/// <summary>
/// Inserts a middleware at the beginning of the pipeline.
/// </summary>
public static IMediatorHostBuilder Prepend(
this IMediatorHostBuilder builder,
MediatorMiddlewareConfiguration middleware)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(middleware);

builder.ConfigureMediator(b => b.Prepend(middleware));
return builder;
}

/// <summary>
/// Inserts a middleware before the middleware identified by <paramref name="before"/>.
/// </summary>
public static IMediatorHostBuilder Prepend(
this IMediatorHostBuilder builder,
string before,
MediatorMiddlewareConfiguration middleware)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(before);
ArgumentNullException.ThrowIfNull(middleware);

builder.ConfigureMediator(b => b.Prepend(before, middleware));
builder.ConfigureMediator(b => b.Use(middleware, before: before, after: after));
return builder;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,8 @@ public interface IInMemoryDispatchEndpointDescriptor
new IInMemoryDispatchEndpointDescriptor Publish<TMessage>();

/// <inheritdoc />
new IInMemoryDispatchEndpointDescriptor UseDispatch(DispatchMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryDispatchEndpointDescriptor AppendDispatch(string after, DispatchMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryDispatchEndpointDescriptor PrependDispatch(
string before,
DispatchMiddlewareConfiguration configuration);
new IInMemoryDispatchEndpointDescriptor UseDispatch(
DispatchMiddlewareConfiguration configuration,
string? before = null,
string? after = null);
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,26 +64,14 @@ public interface IInMemoryMessagingTransportDescriptor : IMessagingTransportDesc
new IInMemoryMessagingTransportDescriptor IsDefaultTransport();

/// <inheritdoc />
new IInMemoryMessagingTransportDescriptor UseDispatch(DispatchMiddlewareConfiguration configuration);
new IInMemoryMessagingTransportDescriptor UseDispatch(
DispatchMiddlewareConfiguration configuration,
string? before = null,
string? after = null);

/// <inheritdoc />
new IInMemoryMessagingTransportDescriptor AppendDispatch(
string after,
DispatchMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryMessagingTransportDescriptor PrependDispatch(
string before,
DispatchMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryMessagingTransportDescriptor UseReceive(ReceiveMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryMessagingTransportDescriptor AppendReceive(string after, ReceiveMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryMessagingTransportDescriptor PrependReceive(
string before,
ReceiveMiddlewareConfiguration configuration);
new IInMemoryMessagingTransportDescriptor UseReceive(
ReceiveMiddlewareConfiguration configuration,
string? before = null,
string? after = null);
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,8 @@ public interface IInMemoryReceiveEndpointDescriptor : IReceiveEndpointDescriptor
IInMemoryReceiveEndpointDescriptor Queue(string name);

/// <inheritdoc />
new IInMemoryReceiveEndpointDescriptor UseReceive(ReceiveMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryReceiveEndpointDescriptor AppendReceive(string after, ReceiveMiddlewareConfiguration configuration);

/// <inheritdoc />
new IInMemoryReceiveEndpointDescriptor PrependReceive(string before, ReceiveMiddlewareConfiguration configuration);
new IInMemoryReceiveEndpointDescriptor UseReceive(
ReceiveMiddlewareConfiguration configuration,
string? before = null,
string? after = null);
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,12 @@ public IInMemoryDispatchEndpointDescriptor ToTopic(string name)
return this;
}

public new IInMemoryDispatchEndpointDescriptor UseDispatch(DispatchMiddlewareConfiguration configuration)
public new IInMemoryDispatchEndpointDescriptor UseDispatch(
DispatchMiddlewareConfiguration configuration,
string? before = null,
string? after = null)
{
base.UseDispatch(configuration);
return this;
}

public new IInMemoryDispatchEndpointDescriptor AppendDispatch(
string after,
DispatchMiddlewareConfiguration configuration)
{
base.AppendDispatch(after, configuration);
return this;
}

public new IInMemoryDispatchEndpointDescriptor PrependDispatch(
string before,
DispatchMiddlewareConfiguration configuration)
{
base.PrependDispatch(before, configuration);
base.UseDispatch(configuration, before: before, after: after);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,57 +63,23 @@ public InMemoryMessagingTransportDescriptor(IMessagingSetupContext discoveryCont
}

/// <inheritdoc />
public new IInMemoryMessagingTransportDescriptor UseDispatch(DispatchMiddlewareConfiguration configuration)
public new IInMemoryMessagingTransportDescriptor UseDispatch(
DispatchMiddlewareConfiguration configuration,
string? before = null,
string? after = null)
{
base.UseDispatch(configuration);
base.UseDispatch(configuration, before: before, after: after);

return this;
}

/// <inheritdoc />
public new IInMemoryMessagingTransportDescriptor AppendDispatch(
string after,
DispatchMiddlewareConfiguration configuration)
public new IInMemoryMessagingTransportDescriptor UseReceive(
ReceiveMiddlewareConfiguration configuration,
string? before = null,
string? after = null)
{
base.AppendDispatch(after, configuration);

return this;
}

/// <inheritdoc />
public new IInMemoryMessagingTransportDescriptor PrependDispatch(
string before,
DispatchMiddlewareConfiguration configuration)
{
base.PrependDispatch(before, configuration);

return this;
}

/// <inheritdoc />
public new IInMemoryMessagingTransportDescriptor UseReceive(ReceiveMiddlewareConfiguration configuration)
{
base.UseReceive(configuration);

return this;
}

/// <inheritdoc />
public new IInMemoryMessagingTransportDescriptor AppendReceive(
string after,
ReceiveMiddlewareConfiguration configuration)
{
base.AppendReceive(after, configuration);

return this;
}

/// <inheritdoc />
public new IInMemoryMessagingTransportDescriptor PrependReceive(
string before,
ReceiveMiddlewareConfiguration configuration)
{
base.PrependReceive(before, configuration);
base.UseReceive(configuration, before: before, after: after);

return this;
}
Expand Down
Loading
Loading