DDD-领域驱动(四)-使用IMediator 实现领域事件

领域事件是指:一个领域中出触发的

集成事件是指:多个微服务之前产生的事件

核心对象

IMediator
INotification
INotificationHandler

引入:IMediator 包

第一个示例演示了使用MediatR使用请求/响应类型的操作。它期望对请求做出一些反应。使用 Send 发送 (注意:Send 只会执行一个扫到的Handler类)

IRequest是指请求的响应是布尔响应。现在,需要一个处理程序来处理这种类型的请求。

Send方法

使用 Send 方法,注意注册容器
services.AddMediatR(Assembly.GetExecutingAssembly());

 [HttpPost]
        public string Get([FromForm] RequestUser user)
        {
           _mediator.Send(user);
            return "执行了Send";
        }
响应体
  public class RequestUser : IRequest<bool> //IRequest<bool> 代表响应是一个 true / false
    {
        public int UserId { get; set; }
        public string UserName { get; set; }
    }
请求体 RequestUser 返回一个Bool
  public class UserHandler : IRequestHandler<RequestUser, bool>
    {
        public Task<bool> Handle(RequestUser request, CancellationToken cancellationToken)
        {
            System.Console.WriteLine("第一个执行了!");
            return Task.FromResult(true);
        }
    }
可以看到 这里只执行了第一个 (执行第一个找到的)

也可以返回一个实体对象

例如:(注意需要把 RequestUser :IRequest 、、修改为 RequestUser :IRequest 或者 返回值为IList类型 IRequest<IEnumerable> )
还需要实现UserHandler : IRequestHandler<RequestUser, bool> 、、修改为 IRequestHandler<RequestUser, ReponseUser> 或者 返回值为IList类型 IRequestHandler<RequestUser, IEnumerable> 。第一个是请求参数,第二个为响应

public class UserHandler : IRequestHandler<RequestUser, ReponseUser>
    {
        public Task<ReponseUser> Handle(RequestUser request, CancellationToken cancellationToken)
        {
            System.Console.WriteLine("第一个执行了!");
            return Task.FromResult(true);
        }
    }
    public class ReponseUser
    {

    }

使用 Publish

Publish 会执行所有的

未完待续!

posted @ 2022-08-16 17:22  Bo-Hong  阅读(491)  评论(0编辑  收藏  举报