Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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# 是否使用Prism事件聚合器或任何其他模式取消消息以拦截命令?_C#_Prism_Messaging_Cqrs_Eventaggregator - Fatal编程技术网

C# 是否使用Prism事件聚合器或任何其他模式取消消息以拦截命令?

C# 是否使用Prism事件聚合器或任何其他模式取消消息以拦截命令?,c#,prism,messaging,cqrs,eventaggregator,C#,Prism,Messaging,Cqrs,Eventaggregator,有人知道如何取消Prism事件聚合器上的任何进一步消息广播吗 我正在尝试执行一些相当标准的命令/事件消息传递-让我用序列图解释一下: 现在我想添加验证。验证应该拦截命令,确定它是否是要应用的有效命令,如果不是,则取消其广播,这是有意义的。本质上,这就是我想要的: 有没有人知道如何按照 public class Validator : ISubscribe<ChangePropertyCommand> public void Handle(ChangePropertyComma

有人知道如何取消Prism事件聚合器上的任何进一步消息广播吗

我正在尝试执行一些相当标准的命令/事件消息传递-让我用序列图解释一下:

现在我想添加验证。验证应该拦截命令,确定它是否是要应用的有效命令,如果不是,则取消其广播,这是有意义的。本质上,这就是我想要的:

有没有人知道如何按照

public class Validator : ISubscribe<ChangePropertyCommand>
  public void Handle(ChangePropertyCommand cmd) {
    if(IsNotValid(cmd))
     _events.Cancel(cmd);
    else
      ...
  }
}
公共类验证程序:ISubscribe
公共无效句柄(ChangePropertyCommand cmd){
如果(IsNotValid(cmd))
_事件。取消(cmd);
其他的
...
}
}

或者还有其他更好的模式可以使用吗?

我怀疑,如果不做大量工作来扩展EventAggregator,这是不可能的。在我看来,做到这一点最简单的方法是只让验证器处理表示命令的事件。如果命令有效,则验证程序直接或通过引发状态更改程序处理的新类型事件来执行状态更改程序。当然,如果命令无效,您将引发已取消的事件。

ChangedPropertyCancelledEvent事件是来自ChangePropertyValidator而不是StateChanger吗?是的,先生,如果命令被取消,那么StateChanger将永远看不到它。实际上,在本次屏幕播放大约15分钟后,演示者就如何处理无效命令(而不是业务规则)发表了一条有趣的评论-