我应该使用这个:
private IMediator _mediator;
protected IMediator Mediator => _mediator ??= HttpContext.RequestServices.GetService<IMediator>();
然后打电话Mediator.Send(...)?
或者是否有必要创建一个控制器实例,在其中调用所需的命令/请求?或者完全是别的什么?
我应该使用这个:
private IMediator _mediator;
protected IMediator Mediator => _mediator ??= HttpContext.RequestServices.GetService<IMediator>();
然后打电话Mediator.Send(...)?
或者是否有必要创建一个控制器实例,在其中调用所需的命令/请求?或者完全是别的什么?
假设你有类似这个请求处理程序的东西。它只是从数据库中获取产品数据
并且有一个 AddProductToBasketCommand 命令处理程序,它将产品添加到购物篮中,为此您需要获取该产品的价格,为此使用 GetProductByIdQueryHandler 是合乎逻辑的,这样做是这样的:
一般来说,无论是一般的中介者模式,还是特别是 MediatR 库,组件之间根本不知道彼此,即有一个特定的处理程序知道如何处理 GetProductByIdQuery 请求,还有一个处理程序知道如何处理 GetProductByIdQuery 请求。知道用 AddProductToBasketCommand 做什么,但彼此不了解,如果需要使用对方的服务,他们只是对一些中介说:“听着,找一个可以处理这个请求/命令的人,让他做必要的事情并通过你传递结果”,这允许你创建组件之间耦合非常松散的应用程序。
PS你说的控制器和它完全没有关系,一般来说你使用的web框架应该被认为是可以授权请求和序列化/反序列化数据的东西,仅此而已,你绝对不应该创建控制器手。