【问题标题】:IController vs ControllerBase vs Controller vs MyController? [closed]IController vs ControllerBase vs Controller vs MyController? [关闭]
【发布时间】:2017-12-30 16:05:41
【问题描述】:

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

我查看了codeproject 和一些stack overflow 问题,但找不到完全相同的问题。

  1. 在 MVC 5 中这个链的目的是什么:IController -> ControllerBase -> Controller -> MyController。
  2. 如果 ControllerBase 应该是制作控制器所需的最小值,那么为什么要有一个 Controller 类?或者反之亦然,如果 Controller 是最小实现,那么 ControllerBase 就不是真正的基类?

提前致谢!

【问题讨论】:

  • 这是开发人员自己的问题,因此它相当广泛,主要基于本网站的意见。
  • @Nkosi 我不确定堆栈溢出协议对于搁置的问题是什么。我已将下面的提交标记为答案,但我同意这对开发人员来说是一个好问题,而且它相当见仁见智。 StephenMuecke 感谢您提供的资源,今天我会仔细研究它们。

标签: c# asp.net-mvc oop


【解决方案1】:

在 MVC 5 中,ControllerBase 仅作为一个基类,主要用于内部使用,并在内部实现 IController.Execute(RequestContext requestContext),这是我从 Resharper 获得的用法列表

Controller 然后实现过滤器、模型和视图绑定的所有功能。因此,要实现你的MyController,你需要派生自Controller

您的 SO reference 已经解释了 ControllerBaseController 的用途。

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

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

Controler.cs

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

ControllerBase.cs

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

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

【讨论】:

  • 感谢您的回答,它在澄清差异方面大有帮助。这个问题现在被搁置了,因为也许这是一个关于为什么以这种方式实施的意见问题。无论哪种方式我都会标记为答案。
猜你喜欢
  • 1970-01-01
  • 2017-06-20
  • 2012-08-07
  • 2023-04-09
  • 2011-07-08
  • 2013-03-13
  • 2016-09-19
  • 2010-09-27
相关资源
最近更新 更多