Quantcast
Channel: ASP.NET Core
Viewing all articles
Browse latest Browse all 9386

DI in .NET Core API for ICommandHandler

$
0
0

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>

Viewing all articles
Browse latest Browse all 9386

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>