Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update: change IMiddleware to IEventMiddleware #430

Merged
merged 2 commits into from
Feb 6, 2023
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
@@ -1,9 +1,9 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.BuildingBlocks.Dispatcher.Events;

public abstract class Middleware<TEvent> : IMiddleware<TEvent> where TEvent : IEvent
public abstract class EventMiddleware<TEvent> : IEventMiddleware<TEvent> where TEvent : IEvent
{
public virtual bool SupportRecursive => true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ namespace Masa.BuildingBlocks.Dispatcher.Events;
public delegate Task EventHandlerDelegate();

/// <summary>
/// Middleware is assembled into an event pipeline to handle invoke event and result
/// IEventMiddleware is assembled into an event pipeline to handle invoke event and result
/// </summary>
public interface IMiddleware<in TEvent>
public interface IEventMiddleware<in TEvent>
where TEvent : IEvent
{
Task HandleAsync(TEvent @event, EventHandlerDelegate next);

/// <summary>
/// If Recursive is not supported, the current Middleware only executes once
/// If Recursive is supported, Middleware will be executed everytime when EventBus is nested
/// If Recursive is not supported, the current IEventMiddleware only executes once
/// If Recursive is supported, IEventMiddleware will be executed everytime when EventBus is nested
/// </summary>
bool SupportRecursive { get; }
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

// ReSharper disable once CheckNamespace

namespace Masa.BuildingBlocks.Dispatcher.Events;

public class ValidatorMiddleware<TEvent> : Middleware<TEvent>
public class ValidatorEventMiddleware<TEvent> : EventMiddleware<TEvent>
where TEvent : IEvent
{
private readonly ILogger<ValidatorMiddleware<TEvent>>? _logger;
private readonly ILogger<ValidatorEventMiddleware<TEvent>>? _logger;
private readonly IEnumerable<IValidator<TEvent>> _validators;

public ValidatorMiddleware(IEnumerable<IValidator<TEvent>> validators, ILogger<ValidatorMiddleware<TEvent>>? logger = null)
public ValidatorEventMiddleware(IEnumerable<IValidator<TEvent>> validators, ILogger<ValidatorEventMiddleware<TEvent>>? logger = null)
{
_validators = validators;
_logger = logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public async Task PublishAsync<TEvent>(TEvent @event, CancellationToken cancella
ArgumentNullException.ThrowIfNull(@event, nameof(@event));
var eventType = @event.GetType();

var middlewares = _serviceProvider.GetRequiredService<IEnumerable<IMiddleware<TEvent>>>();
var middlewares = _serviceProvider.GetRequiredService<IEnumerable<IEventMiddleware<TEvent>>>();
if (!_options.UnitOfWorkRelation.ContainsKey(eventType))
{
throw new NotSupportedException(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Contrib.Dispatcher.Events;
Expand All @@ -18,10 +18,10 @@ public class EventBusBuilder : IEventBusBuilder
/// <exception cref="ArgumentException"></exception>
public IEventBusBuilder UseMiddleware(Type middlewareType, ServiceLifetime middlewareLifetime = ServiceLifetime.Transient)
{
if (!typeof(IMiddleware<>).IsGenericInterfaceAssignableFrom(middlewareType))
if (!typeof(IEventMiddleware<>).IsGenericInterfaceAssignableFrom(middlewareType))
throw new ArgumentException($"{middlewareType.Name} doesn't implement IMiddleware<>");

var descriptor = new ServiceDescriptor(typeof(IMiddleware<>), middlewareType, middlewareLifetime);
var descriptor = new ServiceDescriptor(typeof(IEventMiddleware<>), middlewareType, middlewareLifetime);
Services.TryAddEnumerable(descriptor);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static IServiceCollection AddEventBus(

services.AddSingleton<EventBusProvider>();

services.TryAddEnumerable(new ServiceDescriptor(typeof(IMiddleware<>), typeof(TransactionMiddleware<>), ServiceLifetime.Transient));
services.TryAddEnumerable(new ServiceDescriptor(typeof(IEventMiddleware<>), typeof(TransactionEventMiddleware<>), ServiceLifetime.Transient));

var builder = new EventBusBuilder(services);
eventBusBuilder?.Invoke(builder);
Expand Down Expand Up @@ -74,7 +74,7 @@ public static IServiceCollection AddTestEventBus(
services.TryAddSingleton<IExceptionStrategyProvider, DefaultExceptionStrategyProvider>();
services.TryAdd(typeof(IExecutionStrategy), typeof(ExecutionStrategy), ServiceLifetime.Singleton);
services.TryAddScoped<IInitializeServiceProvider, InitializeServiceProvider>();
services.AddTransient(typeof(IMiddleware<>), typeof(TransactionMiddleware<>));
services.AddTransient(typeof(IEventMiddleware<>), typeof(TransactionEventMiddleware<>));
services.AddScoped(typeof(IEventBus), typeof(EventBus));

return services;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

namespace Masa.Contrib.Dispatcher.Events.Internal.Middleware;

internal class TransactionMiddleware<TEvent> : Middleware<TEvent>
internal class TransactionEventMiddleware<TEvent> : EventMiddleware<TEvent>
where TEvent : IEvent
{
private readonly IInitializeServiceProvider _initializeServiceProvider;
private readonly IUnitOfWork? _unitOfWork;

public override bool SupportRecursive => false;

public TransactionMiddleware(IInitializeServiceProvider initializeServiceProvider, IUnitOfWork? unitOfWork = null)
public TransactionEventMiddleware(IInitializeServiceProvider initializeServiceProvider, IUnitOfWork? unitOfWork = null)
{
_initializeServiceProvider = initializeServiceProvider;
_unitOfWork = unitOfWork;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Masa.Contrib.Dispatcher.Events.Tests.Perfs.Extensions.Middleware;

public class LoggingMiddleware<TEvent> : Middleware<TEvent> where TEvent : notnull, IEvent
public class LoggingMiddleware<TEvent> : EventMiddleware<TEvent> where TEvent : notnull, IEvent
{
private readonly ILogger<LoggingMiddleware<TEvent>>? _logger;
public LoggingMiddleware(ILogger<LoggingMiddleware<TEvent>>? logger = null) => _logger = logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public void TestResolveEventBus()
{
var services = new ServiceCollection();
services
.AddEventBus(eventBusBuilder => eventBusBuilder.UseMiddleware(typeof(LoggingMiddleware<>)))
.AddEventBus(eventBusBuilder => eventBusBuilder.UseMiddleware(typeof(LoggingEventMiddleware<>)))
.AddLogging(loggingBuilder => loggingBuilder.AddConsole());
var serviceProvider = services.BuildServiceProvider();
var eventBus = serviceProvider.GetService<IEventBus>();
Expand Down Expand Up @@ -57,7 +57,7 @@ public void TestEventBus()
{
var services = new ServiceCollection();
services.AddLogging(loggingBuilder => loggingBuilder.AddConsole());
services.AddTestEventBus(AppDomain.CurrentDomain.GetAssemblies(), ServiceLifetime.Scoped,eventBusBuilder => eventBusBuilder.UseMiddleware(typeof(LoggingMiddleware<>)));
services.AddTestEventBus(AppDomain.CurrentDomain.GetAssemblies(), ServiceLifetime.Scoped,eventBusBuilder => eventBusBuilder.UseMiddleware(typeof(LoggingEventMiddleware<>)));
var serviceProvider = services.BuildServiceProvider();
var eventBus = serviceProvider.GetService<IEventBus>();
Assert.IsNotNull(eventBus, "Event bus injection failed");
Expand All @@ -72,7 +72,7 @@ public void TestUseEventBus()
Mock<IDispatcherOptions> dispatcherOptions = new();
dispatcherOptions.Setup(option => option.Assemblies).Returns(assemblies).Verifiable();
dispatcherOptions.Setup(option => option.Services).Returns(services).Verifiable();
dispatcherOptions.Object.UseEventBus(eventBuilder => eventBuilder.UseMiddleware(typeof(LoggingMiddleware<>)));
dispatcherOptions.Object.UseEventBus(eventBuilder => eventBuilder.UseMiddleware(typeof(LoggingEventMiddleware<>)));
var eventBus = services.BuildServiceProvider().GetService<IEventBus>();
Assert.IsNotNull(eventBus);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Contrib.Dispatcher.Events.Tests;
Expand All @@ -11,7 +11,7 @@ public void TestUseMiddleware()
{
var services = new ServiceCollection();
var eventBuilder = new EventBusBuilder(services);
eventBuilder.UseMiddleware(typeof(LoggingMiddleware<>));
eventBuilder.UseMiddleware(typeof(LoggingEventMiddleware<>));

Assert.AreEqual(1, services.Count);
}
Expand All @@ -21,7 +21,7 @@ public void TestUseMiddleware2()
{
var services = new ServiceCollection();
var eventBuilder = new EventBusBuilder(services);
eventBuilder.UseMiddleware(new[] { typeof(LoggingMiddleware<>), typeof(RequestMiddleware<>) });
eventBuilder.UseMiddleware(new[] { typeof(LoggingEventMiddleware<>), typeof(RequestEventMiddleware<>) });

Assert.AreEqual(2, services.Count);
}
Expand All @@ -30,11 +30,11 @@ public void TestUseMiddleware2()
public async Task TestMiddlewareByOrderOfExecutionAsync()
{
var services = new ServiceCollection();
services.AddEventBus(new[] { typeof(CustomMiddleware<>).Assembly }, eventBusBuilder
=> eventBusBuilder.UseMiddleware(new[] { typeof(CustomMiddleware<>), typeof(Custom2Middleware<>) }));
services.AddEventBus(new[] { typeof(CustomEventMiddleware<>).Assembly }, eventBusBuilder
=> eventBusBuilder.UseMiddleware(new[] { typeof(CustomEventMiddleware<>), typeof(Custom2EventMiddleware<>) }));
var serviceProvider = services.BuildServiceProvider();

var middlewares = serviceProvider.GetService<IEnumerable<IMiddleware<MiddlewareEvent>>>();
var middlewares = serviceProvider.GetService<IEnumerable<IEventMiddleware<MiddlewareEvent>>>();
Assert.IsNotNull(middlewares);
Assert.AreEqual(3, middlewares.Count());

Expand All @@ -43,15 +43,15 @@ public async Task TestMiddlewareByOrderOfExecutionAsync()
await eventBus.PublishAsync(@event);

Assert.AreEqual(3, @event.Results.Count);
Assert.AreEqual(nameof(CustomMiddleware<MiddlewareEvent>), @event.Results[0]);
Assert.AreEqual(nameof(Custom2Middleware<MiddlewareEvent>), @event.Results[1]);
Assert.AreEqual(nameof(CustomEventMiddleware<MiddlewareEvent>), @event.Results[0]);
Assert.AreEqual(nameof(Custom2EventMiddleware<MiddlewareEvent>), @event.Results[1]);
Assert.AreEqual(nameof(EventHandlers.MiddlewareEventHandler), @event.Results[2]);
}

public class RequestMiddleware<TEvent> : Middleware<TEvent> where TEvent : IEvent
public class RequestEventMiddleware<TEvent> : EventMiddleware<TEvent> where TEvent : IEvent
{
private readonly ILogger<RequestMiddleware<TEvent>>? _logger;
public RequestMiddleware(ILogger<RequestMiddleware<TEvent>>? logger = null) => _logger = logger;
private readonly ILogger<RequestEventMiddleware<TEvent>>? _logger;
public RequestEventMiddleware(ILogger<RequestEventMiddleware<TEvent>>? logger = null) => _logger = logger;

public override async Task HandleAsync(TEvent @event, EventHandlerDelegate next)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Contrib.Dispatcher.Events.Tests.Middleware;

public class CustomMiddleware<TEvent> : Middleware<TEvent> where TEvent : IEvent
public class Custom2EventMiddleware<TEvent> : EventMiddleware<TEvent> where TEvent : IEvent
{
public override Task HandleAsync(TEvent @event, EventHandlerDelegate next)
{
if (@event is MiddlewareEvent middlewareEvent)
{
middlewareEvent.Results.Add(nameof(CustomMiddleware<TEvent>));
middlewareEvent.Results.Add(nameof(Custom2EventMiddleware<TEvent>));
}
return next();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Contrib.Dispatcher.Events.Tests.Middleware;

public class Custom2Middleware<TEvent> : Middleware<TEvent> where TEvent : IEvent
public class CustomEventMiddleware<TEvent> : EventMiddleware<TEvent> where TEvent : IEvent
{
public override Task HandleAsync(TEvent @event, EventHandlerDelegate next)
{
if (@event is MiddlewareEvent middlewareEvent)
{
middlewareEvent.Results.Add(nameof(Custom2Middleware<TEvent>));
middlewareEvent.Results.Add(nameof(CustomEventMiddleware<TEvent>));
}
return next();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@

namespace Masa.Contrib.Dispatcher.Events.Tests.Middleware;

public class LoggingMiddleware<TEvent> : Middleware<TEvent> where TEvent : IEvent
public class LoggingEventMiddleware<TEvent> : EventMiddleware<TEvent> where TEvent : IEvent
{
private readonly ILogger<LoggingMiddleware<TEvent>>? _logger;
public LoggingMiddleware(ILogger<LoggingMiddleware<TEvent>>? logger = null) => _logger = logger;
private readonly ILogger<LoggingEventMiddleware<TEvent>>? _logger;
public LoggingEventMiddleware(ILogger<LoggingEventMiddleware<TEvent>>? logger = null) => _logger = logger;

public override async Task HandleAsync(TEvent @event, EventHandlerDelegate next)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ protected void ResetMemoryEventBus(Func<IServiceCollection, IServiceCollection>?
});
}

_services.AddTransient(typeof(IMiddleware<>), typeof(LoggingMiddleware<>));
_services.AddTransient(typeof(IEventMiddleware<>), typeof(LoggingEventMiddleware<>));
func?.Invoke(_services);
_services = assemblies == null ? _services.AddTestEventBus(_defaultAssemblies, ServiceLifetime.Scoped) : _services.AddTestEventBus(assemblies, ServiceLifetime.Scoped);
_serviceProvider = _services.BuildServiceProvider();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static void AddIsolation(this IServiceCollection services, Action<Isolati

services
.TryAddConfigure<IsolationDbConnectionOptions>()
.AddTransient(typeof(IMiddleware<>), typeof(IsolationMiddleware<>))
.AddTransient(typeof(IEventMiddleware<>), typeof(IsolationEventMiddleware<>))
.TryAddSingleton<IDbConnectionStringProvider, IsolationDbContextProvider>();

if (services.Any(service => service.ServiceType == typeof(IConnectionStringProvider)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@

namespace Masa.Contrib.Isolation.Middleware;

public class IsolationMiddleware<TEvent> : Middleware<TEvent> where TEvent : IEvent
public class IsolationEventMiddleware<TEvent> : EventMiddleware<TEvent> where TEvent : IEvent
{
private readonly IEnumerable<IIsolationMiddleware> _middlewares;
private readonly IHttpContextAccessor _httpContextAccessor;

public IsolationMiddleware(IEnumerable<IIsolationMiddleware> middlewares, IHttpContextAccessor httpContextAccessor)
public IsolationEventMiddleware(IEnumerable<IIsolationMiddleware> middlewares, IHttpContextAccessor httpContextAccessor)
{
_middlewares = middlewares;
_httpContextAccessor = httpContextAccessor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Framework.IntegrationTests.EventBus.Infrastructure.Middleware;

public class RecordMiddleware<TEvent> : Middleware<TEvent>
public class RecordEventMiddleware<TEvent> : EventMiddleware<TEvent>
where TEvent : IEvent
{
public static int Time { get; set; }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// Copyright (c) MASA Stack All rights reserved.
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.

namespace Masa.Framework.IntegrationTests.EventBus.Infrastructure.Middleware;

public class ValidatorMiddleware<TEvent> : Middleware<TEvent>
public class ValidatorEventMiddleware<TEvent> : EventMiddleware<TEvent>
where TEvent : notnull, IEvent
{
private readonly IEnumerable<IValidator<TEvent>> _validators;

public ValidatorMiddleware(IEnumerable<IValidator<TEvent>> validators)
public ValidatorEventMiddleware(IEnumerable<IValidator<TEvent>> validators)
{
_validators = validators;
}
Expand Down
2 changes: 1 addition & 1 deletion test/Masa.Framework.IntegrationTests.EventBus/TestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public void Initialize()
{
dispatcherOptions
.UseIntegrationEventBus(option => option.UseTestPub().UseEventLog<CustomDbContext>())
.UseEventBus(eventBusBuilder => eventBusBuilder.UseMiddleware(typeof(RecordMiddleware<>)).UseMiddleware(typeof(ValidatorMiddleware<>)))
.UseEventBus(eventBusBuilder => eventBusBuilder.UseMiddleware(typeof(RecordEventMiddleware<>)).UseMiddleware(typeof(ValidatorEventMiddleware<>)))
.UseUoW<CustomDbContext>(optionBuilder =>
{
optionBuilder.UseTestSqlite($"data source=disabled-soft-delete-db-{Guid.NewGuid()}").UseFilter();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ public async Task TestCommandReturnUseTransacationAndTimeEqual1Async()
};
await eventBus.PublishAsync(command);

Assert.IsTrue(RecordMiddleware<RegisterUserCommand>.Time == 1);
Assert.IsTrue(RecordMiddleware<CheckUserQuery>.Time == 0);
Assert.IsTrue(RecordEventMiddleware<RegisterUserCommand>.Time == 1);
Assert.IsTrue(RecordEventMiddleware<CheckUserQuery>.Time == 0);

var dbContext = serviceProvider.GetRequiredService<CustomDbContext>();
Assert.IsTrue(dbContext.Set<User>().Count() == 1);
Expand All @@ -61,8 +61,8 @@ await dbContext.Set<User>().AddAsync(new User()
await eventBus.PublishAsync(query);
Assert.IsTrue(query.Result == default);

Assert.IsTrue(RecordMiddleware<UserAgeQuery>.Time == 1);
Assert.IsTrue(RecordMiddleware<CheckUserQuery>.Time == 0);
Assert.IsTrue(RecordEventMiddleware<UserAgeQuery>.Time == 1);
Assert.IsTrue(RecordEventMiddleware<CheckUserQuery>.Time == 0);
}

[TestMethod]
Expand Down