Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用mediatR使用不同的处理程序处理一个查询?_C#_Ninject_Mediatr - Fatal编程技术网

C# 是否可以使用mediatR使用不同的处理程序处理一个查询?

C# 是否可以使用mediatR使用不同的处理程序处理一个查询?,c#,ninject,mediatr,C#,Ninject,Mediatr,我正在使用ninject+mediatR。我有一个从不同接口继承方法的类: 类查询:IRequest、interfaceName1、interfaceName2 { 公共字符串方法FromFirstInterface(); 公共字符串方法FromSecondInterface(); } 我想使用mediatR来处理这个查询。我可以这样做吗 public类QueryHandler:IRequestHandler { //第一处理程序 公共IReadOnlyList句柄(查询消息) { //某物

我正在使用ninject+mediatR。我有一个从不同接口继承方法的类:

类查询: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。我一直在寻找方法,改进我的代码,使其更加优雅。我使用了一个处理程序和一个通用查询。