2014-12-13 9 views

Odpowiedz

5

Domyślnie, jeśli nie określisz żadnego modyfikatora dostępu dla klasy, to domyślnie będzie to internal w języku C#. Tylko kod w tym samym zespole może uzyskać dostęp do klasy, która jest internal. Jeśli więc kontrolerem jest internal, kod, który tworzy instancję kontrolera po otrzymaniu żądania, musi znajdować się w zespole.

Jednak kod tworzenia kontrolera jest obecny w zespole System.Web.Mvc i domyślnie DefaultControllerFactory jest odpowiedzialny za tworzenie kontrolerów. Jeśli twój kod jest obecny na przykład w zespole MvcApplication1, to DefaultControllerFActory nie może znaleźć twoich klas kontrolerów bez modyfikatora publicznego dostępu, więc nie jest w stanie ich utworzyć.

Jeśli chcesz zbudować ściśle powiązaną aplikację ASP.NET MVC (do której nie jest przeznaczona), teoretycznie możesz zrobić to po kolei.

  1. Uzyskaj kod źródłowy MVC, jeśli jest dostępny.
  2. Następnie skompiluj swój kod w tym samym zespole.
+0

, ale kiedy uczynię kontroler jako wewnętrzny, powinien on wygenerować błąd czasu kompilacji. Domyślnie klasa ma wewnętrzny modyfikator dostępu, dlatego kod nie zwraca błędu kompilacji. Moje pytanie jest takie, że jeśli sprawię, że kontroler będzie wewnętrzny, to powiodą się, ale kiedy sprawię, że kontroler będzie chroniony wewnętrznie, zwróci błąd kompilacji. –

+0

Kompilator nie wie, że kompilujesz dla MVC lub innej aplikacji C#. Po prostu kompiluje się zgodnie z zasadami. Reguły mówią, że możesz zadeklarować klasę wewnętrzną na poziomie root (wewnątrz przestrzeni nazw), ale nie możesz utworzyć chronionej klasy wewnętrznej na poziomie root, ale możesz utworzyć klasę zagnieżdżoną z wewnętrznie zabezpieczoną. – dotnetstep

Powiązane problemy