2014-12-13 10 views

Antwort

5

Wenn Sie in der Standardeinstellung keinen Zugriffsmodifizierer für eine Klasse angeben, wird in C# standardmäßig internal angegeben. Nur Code in derselben Assembly kann auf eine Klasse zugreifen, die internal ist. Wenn Ihr Controller also internal ist, müsste der Code, der beim Empfang einer Anforderung eine Controller-Instanz erstellt, in Ihrer Assembly enthalten sein.

Der Steuerungscode ist jedoch in der System.Web.Mvc Assembly vorhanden und DefaultControllerFactory ist standardmäßig für das Erstellen von Controllern zuständig. Wenn Ihr Code beispielsweise in der MvcApplication1-Assembly vorhanden ist, kann DefaultControllerFActory Ihre Controller-Klassen nicht ohne den Modifikator für den öffentlichen Zugriff finden, sodass sie nicht instanziiert werden kann.

Wenn Sie eine eng gekoppelte ASP.NET MVC-Anwendung erstellen möchten (für die es nicht bestimmt ist), dann könnten Sie es theoretisch folgendermaßen tun.

  1. Holen Sie den MVC-Quellcode, falls verfügbar.
  2. Dann bauen Sie Ihren Code in derselben Baugruppe.
+0

aber wenn ich Controller als intern machen dann sollte es Kompilierzeit Fehler generieren. Standardmäßig hat die Klasse einen internen Zugriffsmodifikator, weshalb der Code keinen Kompilierungsfehler zurückgibt. Meine Frage ist, dass, wenn ich Controller als intern mache, dann build erfolgreich, aber wenn ich Controller als geschützt intern mache, dann gibt es einen Kompilierungsfehler zurück. –

+0

Compiler weiß nicht, dass Sie für MVC oder eine andere C# -Anwendung kompilieren. Es kompiliert nur wie folgt die Regeln. Regeln sagen, dass Sie interne Klassen auf Stammebene deklarieren können (innerhalb von Namespaces), aber Sie können keine geschützte interne Klasse auf Stammebene erstellen, aber Sie können eine geschachtelte Klasse mit internem Schutz erstellen. – dotnetstep

Verwandte Themen