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?

Author: James Avery, 2009-04-17

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.

 23
Author: Boris Callens,
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ć.

 4
Author: J Wynia,
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.

 4
Author: João Passos,
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ć.

 1
Author: Jabe,
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
 1
Author: maartenba,
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/

 0
Author: theGecko,
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