Реализация MEF с помощью ASP.NET MVC?
Я пытаюсь выяснить, есть ли у кого-нибудь опыт или идеи использования MEF (Managed Extensible Framework (Microsoft new plugin framework) с ASP.NET MVC. Мне нужно создать стандартный ASP.NET MVC, который у меня есть. Но мне нужно предложить дополнительную функциональность, т.е. Views и Controllers, и т.д., В зависимости от того, добавляю ли я плагин. Его не нужно динамически компилировать, т.е. исходный код... но DLL, которую я вставлял в систему.
Есть ли способ динамически загружать DLL, когда приложение запускается, а затем MERGE VIEWS и CONTROLLERS с основной системой? Я не знаю, нахожусь ли я на правильном пути здесь.
Затем, я полагаю, в представлениях "СТАНДАРТ", которые поставляются с приложением, я могу использовать "ЕСЛИ ЕСЛИ", чтобы узнать, загружен ли плагин и MERGE в пользовательском элементе управления.
Ну, я говорю здесь громко, но я думаю, вы понимаете, что я получаю.
Любые идеи?
Ответы
Ответ 1
удачи с этим? Я читал этот и думаю, что вы ищете.
У меня ровно нуль xp с MEF, но он выглядит многообещающим. Надеюсь, я смогу скрестить несколько часов свободного времени вместе, чтобы поэкспериментировать с этим. Было бы очень полезно создать какую-то модульную структуру MVC.
Что касается текущего проекта, над которым я работаю, у меня возникает следующая проблема:
Несколько сайтов с одинаковыми представлениями, только другие файлы CSS. В настоящее время мне приходится дублировать мнения, связанные с проблемой поддержки.
Я надеюсь, что смогу поместить эти взгляды в центральное место с помощью MEF.
Ответ 2
Проверьте это:
http://www.fidelitydesign.net/?p=104
Модульный ASP.NET MVC с использованием Managed Extensibility Framework (MEF), часть первая, Мэтью Эбботт.
Ответ 3
Мы используем тонны MEF в ASP.NET MVC, хотя большинство из них находится на уровне ниже уровня контроллера, так как в наших модулях более низкого уровня используются плагины MEF для проверки разрешений и проверки данных.
Однако мы также используем более гибкий подход к нашим контроллерам. Представления более сложны, но мы фактически полностью исключили использование обычных представлений ASP.NET MVC и сохранили наши представления Razor в фрагментах в базе данных. Затем наши контроллеры запрашивают механизм шаблонов для представления во время выполнения и выводят ContentResult в ответ вместо возврата View ( "Viewname" ) и т.д.
В наших плагинах MEF есть все свойства идентификатора, которые позволяют выполнять каскадное переопределение во время выполнения, чтобы выяснить, какой плагин/класс следует использовать для данной цели. Самый простой пример для демонстрации будет, если вы подумаете о приложении, имеющем общую базу, но развернуто до 50+ реализаций, каждый из которых имеет возможность переопределять основные функции.
Итак, у вас может быть что-то вроде IUserController, который включает в себя методы для "Логин", "Выход из системы" и т.д.
В дополнение к этой фактической функциональности мы добавили бы GUID-свойство только для чтения в интерфейс под названием "SiteId". Каждая реализация затем жестко кодирует SiteId, для которого он предназначен. Для реализации по умолчанию в базовом коде он возвращает "Guid.Empty".
Затем, когда мы вызываем MEF и ищем какую реализацию IUserController для использования, мы будем делать ImportMany из всех из них в список, а затем использовать LINQ для запроса свойств, чтобы выяснить, какой из них использовать:
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);
}
Чтобы сделать это с помощью контроллеров, лучше всего посмотреть на некоторые из реализаций фабрик контроллера на базе MEF, находящихся там в Интернете.
Однако, как я уже сказал, мы почти все это делаем на уровне ниже, и наши модули или контроллеры делают такой поиск, чтобы определить, какие плагины будут выполняться.
Ответ 4
Это дикое предположение.
Вы можете перезаписать контроллер по умолчанию factory тем, который использует MEF для обнаружения IController
s. Поскольку представления обнаружены по соглашению, вам не стоит беспокоиться о них.
Ответ 5
Там http://blog.maartenballiauw.be/post/2009/04/21/ASPNET-MVC-and-the-Managed-Extensibility-Framework-(MEF).aspx и https://blogs.msdn.com/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspx описание использования MEF и MVC в приложении.
Ответ 6
Я собрал подключаемую структуру с использованием MVC и MEF с строго типизированными представлениями по адресу: http://www.thegecko.org/index.php/2010/06/pluggable-mvc-2-0-using-mef-and-strongly-typed-views/