Właśnie uczę się asp.net mvc i próbuję dowiedzieć się, jak przenieść moje kontrolery do osobnego projektu. Zwykle, gdy wcześniej projektowałem aplikacje internetowe asp.net, utworzyłem jeden projekt dla moich modeli, inny dla mojej logiki, a potem była sieć Web.
Teraz, gdy uczę się asp.net mvc, miałem nadzieję, że będę postępować zgodnie z podobnym wzorcem i umieszczać modele i kontrolery w osobnych projektach, a po prostu zostawić widoki / skrypty / css w sieci Web. Część dotycząca modeli była łatwa, ale nie rozumiem, jak sprawić, by moje kontrolery w osobnym projekcie zostały „znalezione”. Chciałbym również wiedzieć, czy jest to wskazane. Dzięki!
źródło
Chociaż rozsądne jest utworzenie własnej fabryki ControllerFactory, wydaje mi się, że wygodniej jest zdefiniować wszystkie moje kontrolery w każdym projekcie, ale wyprowadzić je z kontrolerów w moim projekcie współdzielonym:
Ma to dodatkową zaletę, że masz miejsce na umieszczenie logiki kontrolera, która różni się w zależności od projektu. Ponadto innym programistom łatwiej jest szybko znaleźć logikę kontrolera, ponieważ kontrolery istnieją w standardowym miejscu.
Jeśli chodzi o to, czy jest to wskazane, myślę, że tak jest. Stworzyłem wspólną logikę zarządzania kontami, którą chcę udostępniać między projektami, które w przeciwnym razie mają bardzo różną logikę biznesową. Dlatego udostępniam moje konto i kontrolery administratora, ale inne kontrolery są specyficzne dla swoich projektów.
źródło
W klasie dodaj następujący kod (For u'r Controller Code)
}
W folderze widoku projektu mvc dodaj folder dla kontaktu i utwórz plik Call.cshtml.
Dodaj odwołanie do projektu biblioteki klas do głównego projektu MVC.
źródło
Mój problem został rozwiązany po zaktualizowaniu
System.Web.Mvc
odwołania NuGet, więc MvcWebsite i Class Library używają tej samejSystem.Web.Mvc
wersjiNie ma potrzeby dodawania domyślnych przestrzeni nazw
źródło
Najprostszą formą separacji, której używam, jest zachowanie widoków „tak jak jest” w oryginalnym projekcie MVC, ale usunięcie kontrolerów. Następnie w nowym projekcie ClassLibrary Dodaj klasy Controller i upewnij się, że dziedziczą po Controller.
Silnik routingu MVC automatycznie przekieruje do kontrolerów w ClassLibrary, a kontrolery automatycznie skonstruują widoki z oryginalnego projektu MVC, pod warunkiem, że masz odpowiednie odniesienia i zastosowania.
Używam tej architektury do implementacji modułu Html Reports, który można skompilować i wdrożyć niezależnie od głównego rozwiązania. Nareszcie jestem wolny od SSRS!
źródło