根據命令查詢分離原則,命令應返回void。
我正在使用MediatR命令請求處理程序創建一個實體,如下所示。那么我怎樣才能取回創建的實體呢?
public class CreateCompanyCommand : IRequest
{
public string Name { get; set; } = default!;
}
public class CreateCompanyHandler : IRequestHandler<CreateCompanyCommand>
{
private readonly IRepository<Company> _repository;
public CreateCompanyHandler(IRepository<Company> repository)
{
_repository = repository;
}
public async Task<Unit> Handle(CreateCompanyCommand request, CancellationToken cancellationToken)
{
var newCompany = new Company(request.Name);
var createdItem = await _repository.AddAsync(newCompany);
return Unit.Value;
}
}
我在這里看到了這個問題及其答案,但我仍然不清楚。
如何返回createdItem?Unit.Value應該是什么?我能自己修改并返回一些定制的東西而不是Unit.Value嗎?
如果您真的想要返回創建的值,可以更改請求/處理程序以返回它:
沒有什么能強迫你不這么做——命令不應該在純CQR中返回任何內容,但mediatr不會強迫你這么做。
另一種方法是在命令中創建id(并在調用者或命令的ctor中初始化id)
請致電mediatr詢問您的問題,然后查詢您剛剛創建的公司。