IController vs ControllerBase vs Controller vs MyController?

Dav*_*ell 23 c# oop asp.net-mvc

我有一个我正在构建的ASP.NET MVC项目,当我遇到Controller类的实现方式时,我正在浏览一些文档.我对OOP非常熟悉,但对于为什么以这种方式实现它有一些问题.

我查看了codeproject和一些堆栈溢出问题,但找不到我想知道的相同问题.

  1. 在MVC 5中这个链的目的是什么:IController - > ControllerBase - > Controller - > MyController.
  2. 如果ControllerBase应该是制作控制器所需的最小值,那么为什么要使用Controller类呢?或者反过来说如果Controller是最小的实现,那么ControllerBase实际上不是一个基类?

提前致谢!

LxL*_*LxL 54

在MVC 5中,ControllerBase只是像一个基本类一样,主要用于内部使用并在内部实现IController.Execute(RequestContext requestContext),这里是我从Resharper获得的用法列表 在此输入图像描述

Controller随后实现了所有的功能的过滤器,模型和视图结合.因此,要实现你MyController,你需要从中衍生出来Controller

您的SO 参考已经解释了ControllerBase和的目的Controller.

当ASP.NET团队将MVC,WebAPI融合到一个框架中时,MVC 6(后来称为ASP.NET MVC Core)看起来更有趣了

请查看GitHub for ASP.NET Core 1.1.1中Controller和ControllerBase类的源代码.在<summary>每个班级的标签中,他们说:

Controler.cs

具有视图支持的MVC控制器的基类.

ControllerBase.cs

没有视图支持的MVC控制器的基类.

您可能会问何时使用ControllerBase.我的直觉告诉我,如果我只使用ASP.NET MVC进行WebAPI并且不需要该View功能,那么您可以MyController直接从中派生出来ControllerBase.大多数情况下,Controller即使您不使用View并且仅为WebAPI返回字符串或JSON ,您也可以派生.Controller.cs允许您返回View并利用自动绑定.