using AutoMapper; using Kean.Domain.Identity.Commands; using Kean.Domain.Identity.Events; using Kean.Domain.Identity.Models; using Kean.Domain.Identity.Repositories; using System.Threading; using System.Threading.Tasks; namespace Kean.Domain.Identity.CommandHandlers { /// /// 注销命令处理程序 /// public sealed class LogoutCommandHandler : CommandHandler { private readonly ICommandBus _commandBus; // 命令总线 private readonly IMapper _mapper; // 模型映射 private readonly ISessionRepository _sessionRepository; // 会话仓库 /// /// 依赖注入 /// public LogoutCommandHandler( ICommandBus commandBus, IMapper mapper, ISessionRepository sessionRepository) { _commandBus = commandBus; _mapper = mapper; _sessionRepository = sessionRepository; } /// /// 处理程序 /// public override async Task Handle(LogoutCommand command, CancellationToken cancellationToken) { if (command.Token != null) { var session = new Session(command.Token); await _sessionRepository.RemoveSession(session); var @event = _mapper.Map(command); @event.Session = session; await _commandBus.Trigger(@event, cancellationToken); } } } }