Files
FileTime2/src/Core/FileTime.Core.Command/CommandRunner.cs

40 lines
1.1 KiB
C#

using Microsoft.Extensions.Logging;
namespace FileTime.Core.Command;
public class CommandRunner : ICommandRunner
{
private readonly List<ICommandHandler> _commandHandlers;
private readonly ILogger<CommandRunner> _logger;
public CommandRunner(
IEnumerable<ICommandHandler> commandHandlers,
ILogger<CommandRunner> logger)
{
_commandHandlers = commandHandlers.ToList();
_logger = logger;
}
public async Task RunCommandAsync(ICommand command)
{
if (command is IExecutableCommand executableCommand)
{
await executableCommand.Execute();
}
else
{
var commandHandler = await _commandHandlers
.ToAsyncEnumerable()
.FirstOrDefaultAwaitAsync(async c => await c.CanHandleAsync(command));
if (commandHandler != null)
{
await commandHandler.ExecuteAsync(command);
}
else
{
_logger.LogError("No command handler for command {Command}", command.GetType().Name);
}
}
}
}