Структура управляемой расширяемости - PullRequest
4 голосов
/ 04 марта 2011

Я создаю Службу для своей организации, которая будет установлена ​​на сотнях компьютеров.Реализация этого может потребоваться изменить со временем.После просмотра и прочтения немного о MEF я все еще немного растерялся.Является ли MEF хорошим решением для того, чтобы сказать, хочу ли я поместить DLL-файл в папку службы и заставить эту службу принять изменения?

Ответы [ 5 ]

3 голосов
/ 05 марта 2011

Я немного поработал с MEF.Да, MEF сделает то, что вы ищете, с оговоркой ...

  • Вы можете обнаружить и загрузить новую DLL во время выполнения
  • Однако он загружается в тот же домен приложения, что и ваше основное приложение, поэтому
  • Вы не можете выгрузить или изменить DLL без перезапуска приложения

Еслипоследний пункт - проблема, рассмотрим MAF (хотя он намного тяжелее).Но в MAF он загрузит ваши расширения в отдельный домен приложения.

Другой вариант - просто запустить другой процесс для обработки запроса и передать ему параметры командной строки.

1 голос
/ 28 сентября 2011

, если вы используете VS2010, я рекомендую сначала попробовать Нажмите один раз. Он дает вам файл setup.exe, а также файл HTML (и другие файлы), который вы можете загрузить на сервер IIS или на FTP-сайт, или даже в общую папку по локальной сети. Дело в том, что при настройке развертывания вы можете указать установщику, чтобы он автоматически обновлял всех клиентов прямо с сайта (файл HTML, ftp или общая папка lan). Когда пользователь запускает приложение, оно подключается к сайту и запрашивает обновление, если оно существует, и, если это так, приложение самообновляется. Если вы хотите развернуть обновление, вам нужно только снова загрузить файл HTML и все другие файлы в папке.

Проверьте эту ссылку:

http://msdn.microsoft.com/en-us/library/ms953320.aspx

http://weblogs.asp.net/shahar/archive/2008/01/29/how-to-use-clickonce-to-deploy-your-applications.aspx

Удачного кодирования;)

0 голосов
/ 04 марта 2011

Я не эксперт по MEF.Документация говорит, что Mef - это все о создании систем на основе плагинов.поэтому ваша система ожидает некоторых интерфейсов, а MEF упрощает импорт классов, реализованных этими интерфейсами, в вашу систему. Ваш случай кажется подходящим для этого.MEF имеет каталог каталогов, и с помощью каталогов вы можете импортировать типы / библиотеки DLL времени выполнения.

Как получить каталог каталогов MEF, просматривая один и тот же каталог для Servicelayer и DAL?

0 голосов
/ 04 марта 2011

Вы также можете посмотреть на Призма .Из того, что я понимаю, это две разные структуры, которые делают одно и то же.Prism позволяет создавать модули, имея класс в dll, который реализует интерфейс IModule.Вы можете просто перетащить dll в папку таким же образом, как в MEF.Вы можете статически или динамически загружать модули и делать кучу других вещей, о которых я даже не знаю.

Prism также имеет другие функции, связанные с ней, например, контейнер внедрения зависимости Unity (который я люблю называть«Волшебный черный ящик»), аккуратная система событий и команд и т. Д. Я уверен, что MEF также имеет все это.

0 голосов
/ 04 марта 2011

Я думаю, что вы можете сделать это, если у вас есть служебная логика в отдельной библиотеке классов и вы получили необходимые контрактные интерфейсы в другой библиотеке классов. Затем вы можете создать каталог каталога и импортировать реализацию сервиса с помощью MEF (вам нужно только сослаться на сборку интерфейсов контракта). Затем вы можете выбрать новую реализацию dll / service, если она изменилась. Вам нужен только наблюдатель каталога (FileSystemWatcher), затем вам нужно вызвать метод обновления вашего каталога, когда сработает наблюдатель каталога. Теоретически это должно работать, но это всего лишь идея. :) В любом случае, надеюсь, это поможет.

...