2014-12-13 43 views

回答

5

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

但是控制器创建代码存在于System.Web.Mvc组件和缺省DefaultControllerFactory负责创建控制器。如果你的代码中存在,例如,MvcApplication1组装然后DefaultControllerFActory离不开公众访问修饰符找到你的控制器类,所以它是不能够实例化它们。

如果你想建立一个紧密耦合的ASP.NET MVC应用程序(它不是为它设计的),那么理论上你可以按照下面的方式来完成。

  1. 获取MVC的源代码(如果可用)。
  2. 然后建立在同一汇编代码。
+0

但是当我使控制器作为内部那么就应该产生编译时间错误。默认情况下,类有内部访问修饰符,这就是为什么代码不会返回编译错误。我的问题是,如果我把控制器作为内部然后建立成功,但是当我使控制器作为受保护的内部然后它返回一个编译错误。 – 2014-12-14 03:56:14

+0

编译器不知道您是为MVC或其他C#应用程序编译的。它只是按照规则进行编译。规则说,你可以在根级别(在命名空间内)声明内部类,但是你不能在根级创建受保护的内部类,但是你可以创建具有内部保护的嵌套类。 – dotnetstep 2014-12-14 04:15:38

相关问题