2015-06-19 5 views
2

В адаптерах конвейера System.AddIn (aka MAF) имеется много ручного копирования значений от одного типа DTO к другому - от типов HostView до типов Контрактов трубопровода и от типов Контрактов трубопровода до типов вида AddIn (и обратно). Это кажется идеальной ситуацией для использования automapper.Как использовать automapper с System.AddIn?

Однако я не уверен относительно правильного использования и упаковки сторонних сборок в адаптерах HostView и AddInView, особенно когда активация AddIn находится в отдельном AppDomain.

Я попытался следующие:

  • добавить NuGet ссылку на automapper для проекта адаптера AddIn и создать профили отображения внутри. (Я использовал статический ctor для адаптера, который инициализирует профили, потому что MAF отвечает за создание экземпляра адаптера.)

  • Контр-интуитивно, чтобы получить конвейер, чтобы найти и активировать AddIns, поддерживаемые адаптером, мне пришлось обеспечить что DLL automapper жил в каталоге bin моего Хост - наличие библиотеки automapper в папке «AddInAdapters» рядом с фактической DLL-адаптером не повлияло.

С этой договоренностью мне удалось найти и активировать AddIn на моей панели разработчиков (win 7). Но те же самые двоичные файлы не будут работать на Server2008R2. (Я знаю, я знаю: я не контролирую выбор разработки или серверной ОС)

Мы используем (и нацеливаем) .Net 4.5.1 - да, это на рабочем столе и на сервере. Мы используем automapper 2.2.1 - нет, это не в GAC моего окна dev

Где должны быть размещены сторонние сборки, используемые адаптерами (как сторона AddIn, так и сторона Host). Особенно, если учитывать изоляцию AppDomain

Зачем это было сделано в Windows 7, но не 2008R2?

ответ

1

На стороне хоста он должен находиться в корневой директории вашего приложения. Все DLL-файлы хоста загружаются в вашем домене приложения, и распознаватель сборки будет искать в местоположении вашей рабочей сборки для dll automapper.

На стороне Addin он должен находиться в каталоге адаптера addin. Адаптер addin и представление addin загружаются в новый домен приложения и требуют их собственной копии этой DLL.

Одна вещь, чтобы быть осторожным при использовании сторонних библиотек в любом месте вашего конвейера, это может привести к тому, что управление версиями вашего конвейера будет болезненным. Если вы загружаете несколько версий вашего конвейера, чтобы домены V1 и V2 продолжали работать, если они зависят от разных версий сборки, вы можете столкнуться с проблемами при согласовании этого. Если вас не волнует управление версиями конвейера, это меньше беспокоит.

+0

Спасибо за ответ. Это довольно беспорядочно: в конечном итоге я получаю копии сторонних DLL-файлов (bin dir, addin dir), за исключением фактической DLL-адаптера, потому что я не знаю, что такое изоляция AppDomain .WRT для конвейерного управления версиями, я пришел думать, что до тех пор, пока контракты и сборки просмотра являются фиксированными версиями, я могу перестраивать и передислоцировать адаптеры в мое сердцевое содержимое, не переустанавливая DLL-файлы хоста или addin или контракт/просмотр, но теперь выясняется, что если адаптер использует DLL, мне нужно загрязнить директорию bin хоста и addin dir с копией DLL, которую использует адаптер –