MediatR依赖注入的升级步骤
问题描述:
我参加了Jimmy的MediatR DI 1.0.1课程。我试图将基于该课程示例的项目升级到2.0.0,但我找不到任何升级步骤。MediatR依赖注入的升级步骤
下面是该课程的一个具体示例。我已经将IAsyncRequest更改为IRequest,并且看起来是正确的。剩下的错误是:
public class EmployeeEditHandler : AsyncRequestHandler<EmployeeEditModel>
和
protected override async Task HandleCore(EmployeeEditModel message)
我应该AsyncRequestHandler改为? HandleCore是否需要更改?
namespace EmployeeDirectory.ViewModels
{
using MediatR;
//Other using statements removed for this example
public class EmployeeEditQuery : IAsyncRequest<EmployeeEditModel>
{
public Guid Id { get; set; }
}
public class EmployeeEditModel : IAsyncRequest
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class EmployeeEditQueryHandler
: IAsyncRequestHandler<EmployeeEditQuery, EmployeeEditModel>
{
private readonly DirectoryContext _dbContext;
public EmployeeEditQueryHandler(DirectoryContext dbContext)
{
_dbContext = dbContext;
}
public async Task<EmployeeEditModel> Handle(EmployeeEditQuery message)
{
var model = await _dbContext
.Employees
.Where(e => e.Id == message.Id)
.ProjectTo<EmployeeEditModel>()
.SingleOrDefaultAsync();
return model;
}
}
public class EmployeeEditHandler : AsyncRequestHandler<EmployeeEditModel>
{
private readonly DirectoryContext _dbContext;
public EmployeeEditHandler(DirectoryContext dbContext)
{
_dbContext = dbContext;
}
protected override async Task HandleCore(EmployeeEditModel message)
{
var employee = await _dbContext.Employees
.SingleOrDefaultAsync(e => e.Id == message.Id);
Mapper.Map(message, employee);
}
}
}
答
我发现吉米用MediatR 2.0.0重写了Contoso,给了我答案。这里是我必须做的变化从1.0.1到2.0.0:
更新控制器操作:
从:await _mediator.SendAsync(query);
收件人:await _mediator.Send(query);
更新AsyncRequestHandler:
来源:公共类EmployeeEditHandler:AsyncRequestHandler
为:公共类EmployeeEditHandler:IAsyncRequestHandler
更新HandleCore:
来源:保护覆盖异步任务HandleCore(EmployeeEditModel消息)
:公开async Task Handle(EmployeeEditModel message)
更新IAsyncRequest:
From:pub lic类EmployeeEditQuery:IAsyncRequest
致:public class EmployeeEditQuery:IRequest