Hi,
I have implemented CQS pattern in my project. But i have created individual interfaces for each command handlers which is working. I'm trying to get it generated from one common interface (ICommandHandler) and when i try to configure it through DI in startup.cs the code is failing. Any help is appreciated.
The below is code
<div> public interface ICommand</div> <div> {</div> <div> Guid Id { get; }</div> <div> } </div> <div> public abstract class Command : ICommand</div> <div> {</div><div> public Guid Id { get; set; }</div> <div> </div> <div> protected Command()</div> <div> {</div> <div> Id = Guid.NewGuid();</div> <div> </div><div> }</div> <div> </div> <div> }</div> <div> public class CreateAnnouncementDeliveryCommand : Command</div> <div> {</div> <div> public string DepliveryType { get; set; }</div> <div> public string Description { get; set; }</div> <div> }</div> <div> public interface ICommandHandler<in TCommand, TCommandResult> where TCommand : class, ICommand</div> <div> {</div> <div> Task<TCommandResult> Execute(TCommand command);</div> <div> }</div> <div> </div> <div> public partial class CreateAnnouncementDeliveryCommandHandler : ICommandHandler<CreateAnnouncementDeliveryCommand, CreateAnnouncementDeliveryCommand></div> <div> {</div> <div> private readonly IAnnouncementDeliveryManager _manager;</div> <div> private readonly IMapper _mapper;</div> <div> </div><div> public CreateAnnouncementDeliveryCommandHandler(IAnnouncementDeliveryManager manager, IMapper mapper)</div> <div> {</div> <div> _manager = manager;</div> <div> _mapper = mapper;</div> <div> }</div> <div> </div> <div> public Task<CreateAnnouncementDeliveryCommand> Execute(CreateAnnouncementDeliveryCommand command)</div> <div> {</div> <div> </div> <div> return not implemented</div> <div> }</div> <div> </div> <div> }</div> <div></div> <div> In Controller</div> <div></div> <div> public class AnnouncementDeliveryController : BaseController</div> <div> {</div> <div> private readonly ICreateAnnouncementDeliveryCommandHandler _createCommandHandler;</div> <div> private readonly IMapper _mapper;</div> <div> private readonly IHttpContextAccessor _httpContextAccessor;</div> <div> </div> <div> public AnnouncementDeliveryController(ICreateAnnouncementDeliveryCommandHandler createCommandhHndler,</div> <div> IMapper mapper,</div> <div> ILoggingService loggingService,</div> <div> IHttpContextAccessor httpContextAccessor,</div> <div> IUsersQueryHandler userQueryCommandHandler) : base(loggingService, userQueryCommandHandler, httpContextAccessor)</div> <div> {</div><div> _createCommandHandler = createCommandhHndler;</div> <div> _httpContextAccessor = httpContextAccessor;</div> <div> _mapper = mapper;</div> <div> }</div> <div> [HttpPost]</div> <div> [ActionName("AddAnnouncementDelivery")]</div> <div> public async Task<IActionResult> AddAnnouncementDelivery([FromBody] CreateAnnouncementDeliveryCommand _command)</div> <div> {</div> <div> try</div> <div> {</div> <div> var cmd = await _createCommandHandler.Execute(_command);</div> <div> return Ok(cmd);</div> <div> }</div> <div> catch (Exception e)</div> <div> {</div> <div> return BadRequest(e.Message);</div> <div> }</div> <div> }}</div><div> Adding the below in startup.cs </div> <div> services.AddTransient(typeof(ICommandHandler<CreateAnnouncementDeliveryCommand, CreateAnnouncementDeliveryCommand>), typeof(CreateAnnouncementDeliveryCommandHandler));</div> <div> </div> <div> </div>