目录
介绍
任何具有相当复杂性的应用程序通常由许多不同的组件组成,这些组件相互通信。组件由业务逻辑组成。
这会产生紧密耦合,因为我们无法在不影响应用程序其余部分的情况下更换或更改一个组件。
中介者设计模式
Mediator是一种行为设计模式,用于管理许多不同组件之间紧密耦合的应用程序的复杂性。它有助于消除物体之间的这种紧密耦合。这使得应用程序易于维护。
对象不是直接相互通信,而是使用mediator对象进行通信。假设我们有组件A和B。A需要与B沟通。现在,A不是直接与B通信,而是通知mediator对象其与B通信的意图。mediator对象的工作是通知B。这会将所有依赖关系集中到mediator对象上。
Mediator类定义一个notify方法,组件使用该方法触发使用该mediator对象的相应处理程序组件。收到来自发送组件的通知后,mediator识别并调用处理程序组件。
.NET中的MediatR库
在.NET中,MediatR NuGet包可用于实现该Mediator模式。MediatR库对于在您的. NET应用程序中实现CQRS也很有用。
若要在应用程序中使用它,需要在应用程序中添加MediatR NuGet包。可以使用包管理器控制台将其添加为:
Install-Package MediatR
或使用Nuget包管理器:
添加依赖项
下一步是在应用程序中添加MediatR依赖项。在.NET 7应用程序中,可以将依赖项注入为:
builder.Services.AddMediatR(cfg =>
cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()));
使用构造函数注入在类中注入mediator依赖项:
private readonly IMediator _mediator;
public MediatorTestController(IMediator mediator)
{
_mediator = mediator;
}
定义派生自IRequest接口的类
这是我们的信息,客户将传递给mediatR。
public class Product : IRequest<string>
{
public int Productid { get; set; }
public Product(int id)
{
Productid = id;
}
}
定义消息处理程序
这是将处理上述消息对象请求的实际类:
public class ProductHandler : IRequestHandler<Product, string>
{
public Task<string> Handle(Product request, CancellationToken cancellationToken)
{
return Task.FromResult("Sample Order");
}
}
发送消息
现在,最后一步是调用MediatR对象的send方法。对于此方法,将我们在第一步中定义的消息对象作为参数传递。
正如你所看到的,我们不是直接调用ProductHandler类,而是调用mediator对象中定义的send方法。
现在,当您执行应用程序时,您将收到以下响应:
在这种情况下,这可能没有太大区别,因为我们这里只有一个类,但是想象一下,如果我们的应用程序由数百个类组成。这将大大减少我们类之间的耦合。这是因为我们的类将与mediator对象进行通信,而不是直接相互通信。这意味着我们的类现在将只依赖于一个mediator类,而不是依赖于许多其他类。
https://www.codeproject.com/Articles/5368707/Implementing-Mediator-Pattern-using-the-MediatR-Li