IController vs ControllerBase vs Controller vs MyController?

时间:2017-07-24 22:50:15

标签: c# asp.net-mvc oop

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

我查看了codeproject和一些stack overflow个问题,但找不到我想知道的相同问题。

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

1 个答案:

答案 0 :(得分:41)

在MVC 5中,ControllerBase只是像基本类一样,主要用于内部使用,并在内部实现IController.Execute(RequestContext requestContext),这里是我从Resharper获得的用法列表 enter image description here

Controller然后实现过滤器,模型和视图绑定的所有功能。因此,要实施MyController,您需要从Controller

派生

您的搜索引擎reference已经解释了ControllerBaseController的目的。

当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并且仅为WebAPI返回字符串或JSON,您也可以从View派生。 Controller.cs允许您返回View并利用自动绑定。