在
ASP.NET MVC中,ActionResult类是操作方法从控制器返回的所有结果的基础,它被定义为使用单一方法的抽象类(©Microsoft):
public abstract void ExecuteResult(ControllerContext context);
你能想到这个设计的具体原因吗?具体来说,对我来说似乎有点奇怪
>没有IActionResult接口,
>如果有这样的界面,那根本就不需要这个类.
毕竟,如果这是一个接口而不是那个抽象类,那么就不需要扩展基类来创建一个新的ActionResult – 只需要正确实现IActionResult即可.在一个世界上,错误的语言,没有多重继承,这个优势对我来说似乎非常重要.
解决方法
接口非常适合允许类实现多个合同,例如当您知道类型必须是两个不同的东西时.在某些情况下,这可能会鼓励创建一个责任太多的类型.
行动结果只有一个责任,似乎没有任何情况下你需要一个对象同时是一个行动结果和其他东西.即使你这样做,也可以通过作曲来完成.因此,在这种情况下,我们选择ABS以便在RTM进行必要的更改后允许我们更大的灵活性.
但是,如果有一个特定的场景我们阻止接口更好,我们会考虑它.我们总是可以在以后不以破坏的方式做到这一点.
您甚至可以通过编写自己的动作调用程序来完成它,它只需要您实现IActionInvoker(一个接口),并且调用者可以检查您自己的IActionResult而不是ActionResult.