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

Pra*_*kur 6 asp.net-mvc asp.net-mvc-4

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

dot*_*tep 5

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

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

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

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

  • 我想知道我们是否可以使用 assembly:InternalsVisibleTo() 来解决这个问题 (2认同)