C# 是否可以使用mediatR使用不同的处理程序处理一个查询?
我正在使用ninject+mediatR。我有一个从不同接口继承方法的类:C# 是否可以使用mediatR使用不同的处理程序处理一个查询?,c#,ninject,mediatr,C#,Ninject,Mediatr,我正在使用ninject+mediatR。我有一个从不同接口继承方法的类: 类查询:IRequest、interfaceName1、interfaceName2 { 公共字符串方法FromFirstInterface(); 公共字符串方法FromSecondInterface(); } 我想使用mediatR来处理这个查询。我可以这样做吗 public类QueryHandler:IRequestHandler { //第一处理程序 公共IReadOnlyList句柄(查询消息) { //某物
类查询:IRequest、interfaceName1、interfaceName2
{
公共字符串方法FromFirstInterface();
公共字符串方法FromSecondInterface();
}
我想使用mediatR来处理这个查询。我可以这样做吗
public类QueryHandler:IRequestHandler
{
//第一处理程序
公共IReadOnlyList句柄(查询消息)
{
//某物
}
//第二处理程序
公共IReadOnlyList句柄(interfaceName1消息)
{
message.methodFromFirstInterface();
}
//第三处理程序
公共IReadOnlyList句柄(interfaceName2消息)
{
message.methodFromSecondInterface();
}
}
是否可以通过mediatR发送查询来调用第二个或第三个处理程序,而不是第一个 这是不可能的,请求是按具体的请求类型发送给处理程序的。您必须为每个请求创建驱动类型:
public class Query1 : Query, interfaceName1, IRequest<IReadOnlyList<QweReportModel>>
public class Query2 : Query, interfaceName2, IRequest<IReadOnlyList<QweReportModel>>
公共类查询1:Query,interfaceName1,IRequest
公共类Query2:查询、interfaceName2、IRequest
比你的处理程序看起来更像:
public class QueryHandler :
IRequestHandler<Query, IReadOnlyList<QueryResult>>,
IRequestHandler<Query1, IReadOnlyList<QweReportModel>>,
IRequestHandler<Query2, IReadOnlyList<QweReportModel>>
公共类查询句柄:
IRequestHandler,
IRequestHandler,
IRequestHandler
并发送:
mediator.Send<IReadOnlyList<QweReportModel>>(new Query1());
mediator.Send<IReadOnlyList<QweReportModel>>(new Query2());
mediator.Send(新Query1());
mediator.Send(新Query2());
是什么阻止您使用三种不同的查询处理程序?这将尊重单一责任原则,并可直接用于MediatR。我一直在寻找方法,改进我的代码,使其更加优雅。我使用了一个处理程序和一个通用查询。