MediatR简单运用

1,新建.net core3.1 webapi

 

2,引用:MediatR(10.0.1),MediatR.Extensions.Microsoft.DependencyInjection(10.0.1)

 

3,修改startup

public void ConfigureServices(IServiceCollection services)
{
services.AddMediatR(typeof(Startup).Assembly);

}

 

4,定义event

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MediatR;

namespace WebApplication3
{
public class AddUserSuccessEvent:INotification
{
public int Id { get; set; }

public string Name { get; set; }
}

public class AddUserRequestSuccessEvent : IRequest<AddUserRequestSuccessEventReponse>
{
public int Id { get; set; }

public string Name { get; set; }
}

public class AddUserRequestSuccessEventReponse
{
public int Id { get; set; }

public string Name { get; set; }
}

public class AddUserStreamSuccessEvent : IStreamRequest<AddUserStreamSuccessEventReponse>
{
public int Id { get; set; }

public string Name { get; set; }
}

public class AddUserStreamSuccessEventReponse
{
public int Id { get; set; }

public string Name { get; set; }
}

}

 

5,定义处理event

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MediatR;
using System.Threading;

namespace WebApplication3.DomainEventHandler
{
public class AddUserSuccessEventHandler:INotificationHandler<AddUserSuccessEvent>
{
public Task Handle(AddUserSuccessEvent notification, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}

public class AddUserRequestSuccessEventHandler : IRequestHandler<AddUserRequestSuccessEvent, AddUserRequestSuccessEventReponse>
{
public Task<AddUserRequestSuccessEventReponse> Handle(AddUserRequestSuccessEvent notification, CancellationToken cancellationToken)
{
var result = new AddUserRequestSuccessEventReponse() { Id = 1, Name = Guid.NewGuid().ToString() };
return Task.FromResult(result);
}
}

public class AddUserStreamSuccessEventHandler : IStreamRequestHandler<AddUserStreamSuccessEvent, AddUserStreamSuccessEventReponse>
{
public async IAsyncEnumerable<AddUserStreamSuccessEventReponse> Handle(AddUserStreamSuccessEvent notification, CancellationToken cancellationToken)
{
for (int i = 0; i < 2; i++)
{
var result = new AddUserStreamSuccessEventReponse() { Id = i, Name = Guid.NewGuid().ToString() };
yield return result;
}
}
}
}

 

6,新增接口调用

[HttpGet("AddUser")]
public async Task<IActionResult> AddUser()
{
await _mediator.Publish(new AddUserSuccessEvent { Id = 1, Name = Guid.NewGuid().ToString()});

return Ok("成功");
}

[HttpGet("AddUserRequest")]
public async Task<IActionResult> AddUserRequest()
{
var result = await _mediator.Send<AddUserRequestSuccessEventReponse>(new AddUserRequestSuccessEvent { Id = 1, Name = Guid.NewGuid().ToString() });


return Ok(JsonConvert.SerializeObject(result));
}

[HttpGet("AddUserStream")]
public async Task<IActionResult> AddUserStream()
{
var list = new List<AddUserStreamSuccessEventReponse>();
var requestData = new AddUserStreamSuccessEvent { Id = 1, Name = Guid.NewGuid().ToString() };
await foreach (var item in _mediator.CreateStream<AddUserStreamSuccessEventReponse>(requestData))
{
list.Add(item);
}

return Ok(JsonConvert.SerializeObject(list));
}

posted @ 2022-04-26 16:58  元点  阅读(148)  评论(0编辑  收藏  举报