中介者模式实现与MediatR应用

概要

1. Console App Demo
2. Web API + MediatR Demo

Console App Demo

简单的Console App Demo,包括使用自建的中介者对象实现以及MediatR实现

Web API + MediatR Demo

在WebAPI中使用MediatR,最大的改变是将原本注入到controller的依赖分散到了MediatR消息的处理方法中

传统的依赖注入如下图
传统的依赖注入

使用MediatR后,MediatR作为抽象的一层将依赖进一步根据具体逻辑分散
使用MediatR的依赖注入

而接口则变得非常简洁,即
1.发送MediatR消息
2.获得结果
3.返回结果

在MediatR消息的处理方法中,当然也可以通过注入MediatR来再次发送消息,即嵌套的调用。最大程度得分离逻辑来降低逻辑上的耦合

...
using MediatR;
using Application.Exceptions;
using Application.Item.Models;
using Data.RepositoryInterfaces;
using Domain.BaseInterfaces;
using Domain.Entities;

namespace WebApp.Controllers
{

    [ApiController]
    public class ItemController : ControllerBase
    {

        private readonly IMediator _mediator;

        public ItemController(IMediator mediator)
        {
            _mediator = mediator;
        }

        [HttpGet]
        [Route("")]
        public async Task<ActionResult> Get(int itemId)
        {
            var result = await _mediator.Send(new GetItem(id, userid));
            if (result == null) return NotFound();
            return Ok(result);
        }
    }
}

namespace Application.Item.Queries
{
    public class GetItem : IRequest<ItemViewModel>
    {
        public GetItem(int itemId, string userId)
        {
            UserId = userId;
            ItemId = itemId;
        }

        public string UserId { get; }
        public int ItemId { get; }
    }

    public class GetItemHandler : IRequestHandler<GetItem, ItemViewModel>
    {
        private readonly IMediator _mediator;
        private readonly IItemRepository _itemRepository;

        public GetItemHandler(
            IMediator mediator,
            IItemRepository itemRepository
        )
        {
            _mediator = mediator;
            _itemRepository = itemRepository;
        }

        public async Task<ItemViewModel> Handle(GetItem arg, CancellationToken cancellationToken)
        {
            var item = await _itemRepository.Get()
                .Where(i => i.Id == arg.ItemId)
                .Select(i => new
                {
                    Id = i.Id,
                    Name = i.Name,
                }).SingleOrDefaultAsync();

            if (item == null)
                throw new NotFoundException(arg.ItemId.ToString(), nameof(Domain.Entities.Item));

            var companyUser = await _mediator.Send(new GetCompanyUser(arg.UserId, item.CompanyId));

            bool isCompanyUser = companyUser != null;

            return new ItemViewModel(){
                ItemId = item.Id,
                ItemName = item.Name,
                IsCompanyUser = isCompanyUser
            };
        }
    }

    public class GetItemPreProcessor : IRequestPreProcessor<GetItem>
    {
        private readonly IMediator _mediator;
        public GetItemPreProcessor(
            IMediator mediator)
        {
            _mediator = mediator;
        }

        public Task<ItemViewModel>  Process(GetItem request, CancellationToken cancellationToken)
        {
            return await _mediator.Send(new InsertItemViewRecord(request));
        }
    }
}


namespace Application.Item.Commands
{
    //implement InsertItemViewRecord
}

Demo主要流程如下图

2 thoughts on “中介者模式实现与MediatR应用”

  1. ссылка на гидру это самая масштабная торговая площадка запрещенных товаров в России и странах СНГ. Здесь Вы можете приобрети такие товары как марихуана, различные стимуляторы, всевозможные эйфоретики, психоделические препараты, энетеогены, экстази, диссоциативы, опиаты, химические реактивы и конструкторы, различные аптечные препараты, также возможно анонимно обналичить Ваши биткоины и приобрести всевозможные виды документов разных стран. На торговой площадке гидра совершается огромное количество заказов ежедневно, сотни тысяч довольных клиентов и положительных отзывов. Наш портал помогает всем клиентам получить безопасный доступ к торговой площадке hydra и ее товарам и услугам. Гидра онион доступна в тор браузере, ссылку на актуальное рабочее зеркало Вы можете скопировать выше, для этого достаточно нажать на кнопку СКОПИРОВАТЬ.

  2. Большинство граждан сейчас используют online не столько для извлечения информации, сколь для приобретений всяческих изделий, которые попросту запрудили его. И здесь кроме того найдете запрещенные к реализации и незаконные группы. Только не в обычном поисковике по типу Яндекса, а в отдельной зоне, общеизвестной как Даркнет. Одной из площадок данной сети и является гидра, интернет-сайт какой мы и рассмотрим в деталях далее. Потому, если вам тематика покупки противозаконных изделий насущна, то для вас материал получится полезен.

Leave a Reply

Your email address will not be published. Required fields are marked *