为什么ASP.NET MVC Controller类需要公开?

时间:2014-12-13 09:12:58

标签: asp.net-mvc asp.net-mvc-4

当我更改控制器类的访问修饰符时,会导致错误。如果我将操作方法​​的可访问性设置为非公共,那么它也会导致错误(特别是页面未找到错误)。为什么会这样?

1 个答案:

答案 0 :(得分:5)

默认情况下,如果您没有为某个类指定任何访问修饰符,则它将默认为C#中的internal。只有同一程序集中的代码才能访问internal的类。因此,如果您的控制器是internal,则在收到请求时创建控制器实例的代码必须在您的程序集中。

但是System.Web.Mvc程序集中存在控制器创建代码,默认情况下DefaultControllerFactory负责创建控制器。如果你的代码存在于例如MvcApplication1程序集中,那么DefaultControllerFActory在没有公共访问修饰符的情况下找不到你的控制器类,因此它无法实例化它们。

如果你想构建一个紧密耦合的ASP.NET MVC应用程序(它不是为它设计的),那么从理论上讲你可以按照这种方式进行。

  1. 获取MVC源代码(如果有)。
  2. 然后在同一个程序集中构建代码。