Jestem na etapie planowania budowy intranetu pracowniczego za pomocą ASP.NET MVC 4. Chcielibyśmy, aby witryna składała się z oddzielnych „modułów”, z których każdy ma inną funkcję: wysyłanie wiadomości, zmiany płac itp. Chciałbym, aby te moduły mogły być włączane lub wyłączane podczas kompilacji. Strona główna wyświetli rodzaj nawigacji, która będzie prowadzić do każdego załadowanego modułu.
Jak dotąd jest to łatwe, ale nie chcę, aby funkcja nawigacji musiała wcześniej wiedzieć o modułach. Innymi słowy, chcę, aby moduły były dynamicznie wykrywalne; Chcę mieć możliwość napisania kodu dla nowego modułu, a następnie dodania łącza do paska nawigacji bez żadnych zmian kodu w innym miejscu w źródle. Każdy moduł powinien mieć możliwość zarejestrowania się na pasku nawigacyjnym, a - co ważniejsze - należy to zrobić dla każdego modułu podczas ładowania.
Uważam, że wyklucza to korzystanie z Obszarów MVC, ponieważ są one zaprojektowane na wypadek, gdy układ strony jest znany wcześniej. Wydaje się, że MEF może być odpowiednie, chociaż ludzie mieli mieszane sukcesy w łączeniu MEF z MVC. Czy MEF to tak naprawdę sposób na przejście tutaj, czy też istnieje lepszy sposób na osiągnięcie tego, czego potrzebuję?
źródło
Odpowiedzi:
Najpierw miałbym scentralizowaną klasę, która służy aplikacji do rejestrowania skompilowanych modułów za pomocą statycznego konstruktora i statycznej składowej Lista modułów, które były w systemie. Moduły miałyby właściwość statyczną wskazującą, czy jest to element menu, czy nie, i w jakiej kolejności powinien pojawić się w menu.
Każdy moduł miałby swojego statycznego konstruktora, który zapisywałby się w scentralizowanej klasie, która śledzi moduły.
Pomyśl o tym systemie bardziej jak o systemie zegara czasu, w którym przychodzą i rejestrują pracownicy. Potem, w czasie płac, wiemy, że płacimy wszystkim pracownikom na podstawie tego, kto się zarejestrował itp.
Refleksji można również użyć, jeśli masz umowę interfejsu dotyczącą modułów, które muszą dziedziczyć po powiązaniu z nią informacji meta właściwości.
Pracowałem dla Warner Brothers Music i zrobiłem wewnętrzny system przetwarzania muzyki dla różnych formatów kodowania. Stworzyłem ogólny model wtyczki do kodowania z odbiciem, który wykorzystywał dziedziczenie, więc może to być typecast z odbiciem, aby uzyskać podstawowe właściwości meta klasy. Jednak nie próbowałem używać statycznej scentralizowanej klasy. Pomyślałem o tym losowo jako o innym sposobie na zabawę.
Dodałbym również, że korzystałem z MVC obsługujących wielu klientów z podstawowym wymaganiem, ale także z ulepszonymi funkcjami podobnymi do tego, co próbujesz zrobić. Zamiast tego przekonwertowałem MVC na użycie App_Code zamiast konieczności kompilacji. Łatwiej jest wypychać pliki w ten sposób bez potrzeby scentralizowanej kompilacji.
Możesz wykorzystać JIT za pomocą zwykłego wypychania FTP lub GIT zamiast konieczności kompilacji lokalnej i wypychania bibliotek DLL.
Oto link do tego artykułu na temat przepełnienia stosu
źródło
Możesz spróbować użyć MEF z MVC. Dałoby to możliwość dodawania - zabierz w razie potrzeby bez ponownej kompilacji lub wdrażania. Jak zwykle Scott jest dobrym miejscem do rozpoczęcia: http://www.hanselman.com/blog/ExtendingNerdDinnerAddingMEFAndPluginsToASPNETMVC.aspx
źródło