Working on a command dispatcher

This commit is contained in:
Janus Knudsen 2025-03-10 18:10:00 +01:00
parent 31666b4ba0
commit a86a2d7ade
5 changed files with 55 additions and 4 deletions

View file

@ -0,0 +1,13 @@
using Autofac;
using PlanTempus.Components.Users.Create;
namespace PlanTempus.Components;
public class CommandHandler(IComponentContext context) : ICommandHandler
{
public Task<TCommandResult> Handle<TCommand, TCommandResult>(TCommand command)
{
var handler = context.Resolve<ICommandHandler<TCommand, TCommandResult>>();
return handler.Handle(command);
}
}

View file

@ -16,7 +16,7 @@ namespace PlanTempus.Components.ModuleRegistry
// Registrer en decorator for alle ICommandHandler<TCommand> // Registrer en decorator for alle ICommandHandler<TCommand>
builder.RegisterGenericDecorator( builder.RegisterGenericDecorator(
typeof(LoggingCommandHandlerDecorator<>), // Din decorator-klasse typeof(CreateUserHandlerDecorator<>), // Din decorator-klasse
typeof(ICommandHandler<>)); // Interface, der skal dekoreres typeof(ICommandHandler<>)); // Interface, der skal dekoreres
} }

View file

@ -7,8 +7,8 @@ namespace PlanTempus.Components.Users.Create
public class CreateUserCommand : ICommand public class CreateUserCommand : ICommand
{ {
public string Email { get; set; } public required string Email { get; set; }
public string Password { get; set; } public required string Password { get; set; }
public bool IsActive { get; set; } = true; public bool IsActive { get; set; } = true;
public required Guid CorrelationId { get; set; } public required Guid CorrelationId { get; set; }
} }

View file

@ -8,7 +8,12 @@ using PlanTempus.Core.Telemetry;
namespace PlanTempus.Components.Users.Create namespace PlanTempus.Components.Users.Create
{ {
public interface ICommandHandler<T, TResult> public interface ICommandHandler
{
Task<TCommandResult> Handle<TCommand, TCommandResult>(TCommand command );
}
public interface ICommandHandler<in T, TResult>
{ {
Task<TResult> Handle(T input); Task<TResult> Handle(T input);
} }

View file

@ -0,0 +1,33 @@
using Autofac;
using Insight.Database;
using PlanTempus.Components;
using PlanTempus.Components.Users.Create;
using PlanTempus.Core.Database;
using PlanTempus.Core.Database.ConnectionFactory;
namespace PlanTempus.X.TDD.CommandQueryHandlerTests;
[TestClass]
public class HandlerTest : TestFixture
{
[TestInitialize]
public void This()
{
}
[TestMethod]
public void TestDefaultConnection()
{
var commandHandler = Container.Resolve<CommandHandler>();
var command = new CreateUserCommand
{
Email = "lloyd@dumbanddumber.com", // Lloyd Christmas
Password = "1234AceVentura#LOL", // Ace Ventura
IsActive = true,
CorrelationId = Guid.NewGuid()
};
var result = commandHandler.Handle<CreateUserCommand, CreateUserResult>(command);
}
}