Realizacja MEF z ASP.NET MVC?
Próbuję się dowiedzieć, czy ktoś ma jakieś doświadczenie lub pomysły na korzystanie z MEF (Managed Extensible Framework (Nowy Framework wtyczek Microsoftu) z ASP.NET MVC. Muszę stworzyć standard ASP.NET MVC, które mam. Ale muszę zaoferować dodatkowe funkcjonalności tj. widoki i kontrolery, itp, w zależności czy dodam plugin. Nie trzeba go dynamicznie kompilować tj. kod źródłowy... ale DLL, który umieściłem w systemie..
Czy Jest jakiś sposób na dynamiczne ładowanie biblioteki DLL, gdy uruchamia się aplikacja, a następnie Scala widok i kontrolery z głównym systemem? Nie wiem, czy jestem na dobrej drodze.
Następnie, przypuszczam, że w" standardowych "widokach, które pochodzą z aplikacji, mogę użyć "IF THEN", aby dowiedzieć się, czy wtyczka jest załadowana i połączyć się z kontrolą Użytkownika.
Cóż, mówię tu głośno, ale myślę, że rozumiesz, do czego zmierzam.
Jakieś pomysły?
6 answers
Udało się? Czytałam to i myślę, że właśnie tego szukasz.
Mam dokładnie zero xp z MEF, ale wygląda obiecująco. Mam nadzieję, że będę mógł poświęcić kilka godzin wolnego czasu razem w domu, aby eksperymentować z tym. Bardzo przydatne byłoby stworzenie w ten sposób jakiegoś modularnego "frameworka" MVC.
Jeśli chodzi o obecny projekt, nad którym pracuję, mam następujący problem:
Wiele witryn z tymi samymi widokami, tylko inne pliki CSS. Obecnie muszę zduplikuj widoki, powodując problem z utrzymaniem.
Mam nadzieję, że mogę umieścić te widoki w centralnym miejscu za pomocą MEF.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-23 11:51:24
Używamy ton MEF w ASP.NET MVC, choć większość z nich znajduje się na poziomie poniżej poziomu kontrolera, ponieważ w naszych modułach niższego poziomu używają wtyczek MEF do sprawdzania uprawnień i walidacji danych.
Stosujemy jednak również bardziej złożone podejście do naszych kontrolerów. Widoki są bardziej skomplikowane, ale faktycznie całkowicie wyeliminowaliśmy korzystanie z regularnych ASP.NET widoki MVC i przechowywać nasze widoki Razor w urywkach w bazie danych. Nasi kontrolerzy następnie pytają silnik szablonów o Widok na runtime i Renderuj zawartość odpowiedzi zamiast zwracać Widok ("Viewname"), itd.
Nasze wtyczki MEF posiadają wszystkie właściwości identyfikujące, które pozwalają nam wykonać nadpisywanie kaskadowe w czasie wykonywania, aby dowiedzieć się, która wtyczka/klasa powinna być używana w danym celu. Najprostszym przykładem do zademonstrowania byłoby pomyślenie o aplikacji, która ma wspólną bazę, ale jest wdrożona do ponad 50 implementacji, z których każda ma opcję nadpisania podstawowej funkcjonalności.
Więc możesz mieć coś w rodzaju kontrolera IUserController, który zawiera metody "Login", "Logout", itp.
Oprócz tej rzeczywistej funkcjonalności, dodalibyśmy właściwość GUID tylko do odczytu do interfejsu o nazwie "SiteId". Każda implementacja będzie następnie kodować identyfikator SiteId, dla którego jest przeznaczona. W przypadku" domyślnej "implementacji w kodzie głównym zwracany będzie" Guid.Puste".
Następnie, kiedy wywołujemy MEF i szukamy, której implementacji IUserController użyć, wykonamy ImportMany z nich wszystkich do listy, a następnie użyj LINQ, aby odpytywać właściwości, aby dowiedzieć się, którego z nich użyć:
var _currentUserController = _availableUserControllers.FirstOrDefault(
c=>c.SiteId == AppSettings.SiteId);
if(_currentUserController == null){
//There is no site-specific override
_currentUserController = _availableUserControllers.FirstOrDefault(
c=>c.SiteId == Guid.Empty);
}
Aby to zrobić z kontrolerami, najlepiej przyjrzeć się niektórym implementacjom fabryk kontrolerów opartych na MEF dostępnych w sieci.
Jednak, jak powiedziałem, robimy prawie wszystko na poziomie, który jest niższy i nasze moduły lub kontrolery wykonują tego rodzaju wyszukiwanie, aby określić, które wtyczki należy uruchomić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-27 07:02:28
Sprawdź to:
Http://www.fidelitydesign.net/?p=104
Modułowe ASP.NET MVC using the Managed Extensibility Framework (MEF), Part One by Matthew Abbott.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-07 14:05:14
To jest strzał w dziesiątkę.
Możesz nadpisać domyślną fabrykę kontrolera za pomocą kontrolera, który używa MEF do wykrywania IController
s. ponieważ widoki są wykrywane przez Konwencję, nie powinieneś się o nie martwić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-17 14:17:35
Jest http://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-(MEF).aspx i https://blogs.msdn.com/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspx opisujący jak używać MEF i MVC w aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-25 09:35:51
Stworzyłem Framework pluggable wykorzystujący MVC i MEF z mocno wpisanymi widokami na: http://www.thegecko.org/index.php/2010/06/pluggable-mvc-2-0-using-mef-and-strongly-typed-views/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-01 21:17:51