diff --git a/Directory.Packages.props b/Directory.Packages.props
index d875379..6c58a7d 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -1,14 +1,16 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
+
\ No newline at end of file
diff --git a/src/Ardalis.SharedKernel/Ardalis.SharedKernel.csproj b/src/Ardalis.SharedKernel/Ardalis.SharedKernel.csproj
index bc61a88..3e55e32 100644
--- a/src/Ardalis.SharedKernel/Ardalis.SharedKernel.csproj
+++ b/src/Ardalis.SharedKernel/Ardalis.SharedKernel.csproj
@@ -13,9 +13,10 @@
https://github.com/ardalis/Ardalis.SharedKernel
DDD;Shared Kernel;SharedKernel;Domain-Driven Design;Repository;Specification;ValueObject;Value Object;Ardalis;Clean;Clean Architecture;Clean Architecture Template
icon.png
- 3.0.1
+ 4.0.0
- * Net9
+ * Swapped out MediatR for Mediator Souregenerator and Mediator.Abstractions
+ * Updated dependencies to latest versions
true
true
@@ -26,7 +27,7 @@
-
+
diff --git a/src/Ardalis.SharedKernel/DomainEventBase.cs b/src/Ardalis.SharedKernel/DomainEventBase.cs
index 5bb7558..879d490 100644
--- a/src/Ardalis.SharedKernel/DomainEventBase.cs
+++ b/src/Ardalis.SharedKernel/DomainEventBase.cs
@@ -1,13 +1,12 @@
-using MediatR;
+using Mediator;
namespace Ardalis.SharedKernel;
///
-/// A base type for domain events. Depends on MediatR INotification.
+/// A base type for domain events. Depends on Mediator INotification.
/// Includes DateOccurred which is set on creation.
///
public abstract class DomainEventBase : INotification
{
public DateTime DateOccurred { get; protected set; } = DateTime.UtcNow;
}
-
diff --git a/src/Ardalis.SharedKernel/ICommand.cs b/src/Ardalis.SharedKernel/ICommand.cs
deleted file mode 100644
index 7367b2e..0000000
--- a/src/Ardalis.SharedKernel/ICommand.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using MediatR;
-
-namespace Ardalis.SharedKernel;
-
-///
-/// Source: https://code-maze.com/cqrs-mediatr-fluentvalidation/
-///
-///
-public interface ICommand : IRequest
-{
-}
diff --git a/src/Ardalis.SharedKernel/ICommandHandler.cs b/src/Ardalis.SharedKernel/ICommandHandler.cs
deleted file mode 100644
index 160925d..0000000
--- a/src/Ardalis.SharedKernel/ICommandHandler.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using MediatR;
-
-namespace Ardalis.SharedKernel;
-
-///
-/// Source: https://code-maze.com/cqrs-mediatr-fluentvalidation/
-///
-///
-///
-public interface ICommandHandler : IRequestHandler
- where TCommand : ICommand
-{
-}
diff --git a/src/Ardalis.SharedKernel/IQuery.cs b/src/Ardalis.SharedKernel/IQuery.cs
deleted file mode 100644
index f9019b9..0000000
--- a/src/Ardalis.SharedKernel/IQuery.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using MediatR;
-
-namespace Ardalis.SharedKernel;
-
-///
-/// Source: https://code-maze.com/cqrs-mediatr-fluentvalidation/
-///
-///
-public interface IQuery : IRequest
-{
-}
diff --git a/src/Ardalis.SharedKernel/IQueryHandler.cs b/src/Ardalis.SharedKernel/IQueryHandler.cs
deleted file mode 100644
index fff209b..0000000
--- a/src/Ardalis.SharedKernel/IQueryHandler.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using MediatR;
-
-namespace Ardalis.SharedKernel;
-
-///
-/// Source: https://code-maze.com/cqrs-mediatr-fluentvalidation/
-///
-///
-///
-public interface IQueryHandler : IRequestHandler
- where TQuery : IQuery
-{
-}
diff --git a/src/Ardalis.SharedKernel/LoggingBehavior.cs b/src/Ardalis.SharedKernel/LoggingBehavior.cs
index 27e8067..3a020a3 100644
--- a/src/Ardalis.SharedKernel/LoggingBehavior.cs
+++ b/src/Ardalis.SharedKernel/LoggingBehavior.cs
@@ -1,47 +1,33 @@
using System.Diagnostics;
using System.Reflection;
using Ardalis.GuardClauses;
-using MediatR;
+using Mediator;
using Microsoft.Extensions.Logging;
namespace Ardalis.SharedKernel;
///
-/// Adds logging for all requests in MediatR pipeline.
+/// Adds logging for all requests in Mediator pipeline.
/// Configure by adding the service with a scoped lifetime
-///
-/// Example for Autofac:
-/// builder
-/// .RegisterType<Mediator>()
-/// .As<IMediator>()
-/// .InstancePerLifetimeScope();
-///
-/// builder
-/// .RegisterGeneric(typeof(LoggingBehavior<,>))
-/// .As(typeof(IPipelineBehavior<,>))
-/// .InstancePerLifetimeScope();
-///
///
///
///
-public class LoggingBehavior : IPipelineBehavior
- where TRequest : IRequest
+public class LoggingBehavior(ILogger> logger)
+ : IPipelineBehavior
+ where TRequest : IRequest
{
- private readonly ILogger _logger;
+ private readonly ILogger> _logger = logger;
- public LoggingBehavior(ILogger logger)
- {
- _logger = logger;
- }
-
- public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken)
+ public async ValueTask Handle(
+ TRequest request,
+ MessageHandlerDelegate next,
+ CancellationToken cancellationToken)
{
Guard.Against.Null(request);
if (_logger.IsEnabled(LogLevel.Information))
{
_logger.LogInformation("Handling {RequestName}", typeof(TRequest).Name);
- // Reflection! Could be a performance concern
Type myType = request.GetType();
IList props = new List(myType.GetProperties());
foreach (PropertyInfo prop in props)
@@ -53,11 +39,10 @@ public async Task Handle(TRequest request, RequestHandlerDelegate _logger;
+ private readonly ILogger _logger;
- public MediatRDomainEventDispatcher(IMediator mediator, ILogger logger)
+ public MediatorDomainEventDispatcher(IMediator mediator, ILogger logger)
{
_mediator = mediator;
_logger = logger;
diff --git a/tests/Ardalis.SharedKernel.UnitTests/Ardalis.SharedKernel.UnitTests.csproj b/tests/Ardalis.SharedKernel.UnitTests/Ardalis.SharedKernel.UnitTests.csproj
index e9284f4..a3b8301 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/Ardalis.SharedKernel.UnitTests.csproj
+++ b/tests/Ardalis.SharedKernel.UnitTests/Ardalis.SharedKernel.UnitTests.csproj
@@ -6,9 +6,11 @@
-
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/tests/Ardalis.SharedKernel.UnitTests/DomainEventBaseTests/DomainEventBase_Constructor.cs b/tests/Ardalis.SharedKernel.UnitTests/DomainEventBaseTests/DomainEventBase_Constructor.cs
index f7ea65f..004db4d 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/DomainEventBaseTests/DomainEventBase_Constructor.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/DomainEventBaseTests/DomainEventBase_Constructor.cs
@@ -1,11 +1,10 @@
-using Xunit;
-using FluentAssertions;
+using Mediator;
namespace Ardalis.SharedKernel.UnitTests.DomainEventBaseTests;
-public class DomainEventBase_Constructor
+public class DomainEventBase_Constructor : INotificationHandler
{
- private class TestDomainEvent : DomainEventBase { }
+ public class TestDomainEvent : DomainEventBase { }
[Fact]
public void SetsDateOccurredToCurrentDateTime()
@@ -20,4 +19,9 @@ public void SetsDateOccurredToCurrentDateTime()
domainEvent.DateOccurred.Should().BeOnOrAfter(beforeCreation);
domainEvent.DateOccurred.Should().BeOnOrBefore(DateTime.UtcNow);
}
+
+ public ValueTask Handle(TestDomainEvent notification, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/tests/Ardalis.SharedKernel.UnitTests/EntityBaseTests/EntityBase_AddDomainEvent.cs b/tests/Ardalis.SharedKernel.UnitTests/EntityBaseTests/EntityBase_AddDomainEvent.cs
index 998f58c..2585ab0 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/EntityBaseTests/EntityBase_AddDomainEvent.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/EntityBaseTests/EntityBase_AddDomainEvent.cs
@@ -1,11 +1,10 @@
-using FluentAssertions;
-using Xunit;
+using Mediator;
namespace Ardalis.SharedKernel.UnitTests.EntityBaseTests;
-public class EntityBase_AddDomainEvent
+public class EntityBase_AddDomainEvent : INotificationHandler
{
- private class TestDomainEvent : DomainEventBase { }
+ public class TestDomainEvent : DomainEventBase { }
private class TestEntity : EntityBase
{
@@ -29,4 +28,9 @@ public void AddsDomainEventToEntity()
entity.DomainEvents.Should().HaveCount(1);
entity.DomainEvents.Should().AllBeOfType();
}
+
+ public ValueTask Handle(EntityBase_AddDomainEvent.TestDomainEvent notification, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/tests/Ardalis.SharedKernel.UnitTests/GlobalUsings.cs b/tests/Ardalis.SharedKernel.UnitTests/GlobalUsings.cs
new file mode 100644
index 0000000..d0c09c4
--- /dev/null
+++ b/tests/Ardalis.SharedKernel.UnitTests/GlobalUsings.cs
@@ -0,0 +1,2 @@
+global using Xunit;
+global using AwesomeAssertions;
diff --git a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEvents.cs b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEvents.cs
similarity index 57%
rename from tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEvents.cs
rename to tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEvents.cs
index 3e8535e..8dcd113 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEvents.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEvents.cs
@@ -1,14 +1,12 @@
-using FluentAssertions;
-using MediatR;
+using Mediator;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
-using Xunit;
-namespace Ardalis.SharedKernel.UnitTests.MediatRDomainEventDispatcherTests;
+namespace Ardalis.SharedKernel.UnitTests.MediatorDomainEventDispatcherTests;
-public class DispatchAndClearEvents
+public class DispatchAndClearEvents : INotificationHandler
{
- private class TestDomainEvent : DomainEventBase { }
+ public class TestDomainEvent : DomainEventBase { }
private class TestEntity : EntityBase
{
public void AddTestDomainEvent()
@@ -23,7 +21,7 @@ public async Task CallsPublishAndClearDomainEvents()
{
// Arrange
var mediatorMock = new Mock();
- var domainEventDispatcher = new MediatRDomainEventDispatcher(mediatorMock.Object, NullLogger.Instance);
+ var domainEventDispatcher = new MediatorDomainEventDispatcher(mediatorMock.Object, NullLogger.Instance);
var entity = new TestEntity();
entity.AddTestDomainEvent();
@@ -34,4 +32,9 @@ public async Task CallsPublishAndClearDomainEvents()
mediatorMock.Verify(m => m.Publish(It.IsAny(), It.IsAny()), Times.Once);
entity.DomainEvents.Should().BeEmpty();
}
+
+ public ValueTask Handle(TestDomainEvent notification, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithGuidId.cs b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithGuidId.cs
similarity index 61%
rename from tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithGuidId.cs
rename to tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithGuidId.cs
index a2f9584..69151e1 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithGuidId.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithGuidId.cs
@@ -1,14 +1,13 @@
-using FluentAssertions;
-using MediatR;
+using Mediator;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Xunit;
namespace Ardalis.SharedKernel.UnitTests.MediatRDomainEventDispatcherTests;
-public class DispatchAndClearEventsWithGuidId
+public class DispatchAndClearEventsWithGuidId : INotificationHandler
{
- private class TestDomainEvent : DomainEventBase { }
+ public class TestDomainEvent : DomainEventBase { }
private class TestEntity : EntityBase
{
public void AddTestDomainEvent()
@@ -23,7 +22,7 @@ public async Task CallsPublishAndClearDomainEvents()
{
// Arrange
var mediatorMock = new Mock();
- var domainEventDispatcher = new MediatRDomainEventDispatcher(mediatorMock.Object, NullLogger.Instance);
+ var domainEventDispatcher = new MediatorDomainEventDispatcher(mediatorMock.Object, NullLogger.Instance);
var entity = new TestEntity();
entity.AddTestDomainEvent();
@@ -34,4 +33,9 @@ public async Task CallsPublishAndClearDomainEvents()
mediatorMock.Verify(m => m.Publish(It.IsAny(), It.IsAny()), Times.Once);
entity.DomainEvents.Should().BeEmpty();
}
+
+ public ValueTask Handle(DispatchAndClearEventsWithGuidId.TestDomainEvent notification, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithMixedIds.cs b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithMixedIds.cs
similarity index 77%
rename from tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithMixedIds.cs
rename to tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithMixedIds.cs
index 6cf4859..b101869 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithMixedIds.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithMixedIds.cs
@@ -1,14 +1,13 @@
-using FluentAssertions;
-using MediatR;
+using Mediator;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Xunit;
namespace Ardalis.SharedKernel.UnitTests.MediatRDomainEventDispatcherTests;
-public class DispatchAndClearEventsWithMixedIds
+public class DispatchAndClearEventsWithMixedIds : INotificationHandler
{
- private class TestDomainEvent : DomainEventBase { }
+ public class TestDomainEvent : DomainEventBase { }
public readonly record struct StronglyTyped { }
private class TestEntity : EntityBase
@@ -41,7 +40,7 @@ public async Task CallsPublishAndClearDomainEventsWithStronglyTypedId()
{
// Arrange
var mediatorMock = new Mock();
- var domainEventDispatcher = new MediatRDomainEventDispatcher(mediatorMock.Object, NullLogger.Instance);
+ var domainEventDispatcher = new MediatorDomainEventDispatcher(mediatorMock.Object, NullLogger.Instance);
var entity = new TestEntity();
var entityGuid = new TestEntityGuid();
var entityStronglyTyped = new TestEntityStronglyTyped();
@@ -58,4 +57,9 @@ public async Task CallsPublishAndClearDomainEventsWithStronglyTypedId()
entityGuid.DomainEvents.Should().BeEmpty();
entityStronglyTyped.DomainEvents.Should().BeEmpty();
}
+
+ public ValueTask Handle(TestDomainEvent notification, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithStronglyTypedIds.cs b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithStronglyTypedIds.cs
similarity index 65%
rename from tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithStronglyTypedIds.cs
rename to tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithStronglyTypedIds.cs
index 260a66d..56d7035 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/MediatRDomainEventDispatcherTests/DispatchAndClearEventsWithStronglyTypedIds.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/MediatorDomainEventDispatcherTests/DispatchAndClearEventsWithStronglyTypedIds.cs
@@ -1,14 +1,13 @@
-using FluentAssertions;
-using MediatR;
+using Mediator;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Xunit;
namespace Ardalis.SharedKernel.UnitTests.MediatRDomainEventDispatcherTests;
-public class DispatchAndClearEventsWithStronglyTypedIds
+public class DispatchAndClearEventsWithStronglyTypedIds : INotificationHandler
{
- private class TestDomainEvent : DomainEventBase { }
+ public class TestDomainEvent : DomainEventBase { }
public readonly record struct StronglyTyped { }
@@ -26,8 +25,8 @@ public async Task CallsPublishAndClearDomainEventsWithStronglyTypedId()
{
// Arrange
Mock mediatorMock = new Mock();
- MediatRDomainEventDispatcher domainEventDispatcher =
- new(mediatorMock.Object, NullLogger.Instance);
+ MediatorDomainEventDispatcher domainEventDispatcher =
+ new(mediatorMock.Object, NullLogger.Instance);
TestEntityStronglyTyped entity = new();
entity.AddTestDomainEvent();
@@ -38,4 +37,9 @@ public async Task CallsPublishAndClearDomainEventsWithStronglyTypedId()
mediatorMock.Verify(m => m.Publish(It.IsAny(), It.IsAny()), Times.Once);
entity.DomainEvents.Should().BeEmpty();
}
+
+ public ValueTask Handle(TestDomainEvent notification, CancellationToken cancellationToken)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_HashEquality.cs b/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_HashEquality.cs
index 13d5e59..2bd2603 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_HashEquality.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_HashEquality.cs
@@ -1,7 +1,4 @@
-using FluentAssertions;
-using Xunit;
-
-namespace Ardalis.SharedKernel.UnitTests.ValueObjectTests;
+namespace Ardalis.SharedKernel.UnitTests.ValueObjectTests;
public class ValueObject_HashEquality
{
[Fact]
diff --git a/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_ValueEquality.cs b/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_ValueEquality.cs
index f8db681..b48a7b0 100644
--- a/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_ValueEquality.cs
+++ b/tests/Ardalis.SharedKernel.UnitTests/ValueObjectTests/ValueObject_ValueEquality.cs
@@ -1,7 +1,4 @@
-using FluentAssertions;
-using Xunit;
-
-namespace Ardalis.SharedKernel.UnitTests.ValueObjectTests;
+namespace Ardalis.SharedKernel.UnitTests.ValueObjectTests;
public class ValueObject_ValueEquality
{