Встреча с зависимостями сборки в среде MEF

У меня есть приложение, в котором я использую MEF для динамической загрузки сборок расширения. Одна сборка — доменный слой, вторая — представление. Сборка домена загружается и работает должным образом. Псевдоструктура выглядит так:

  • Solution
    • Domain Project
    • Посмотреть проект

Проблема, с которой я сталкиваюсь, заключается в том, что сборка представления содержит 1..N пользовательских элементов управления, которые являются визуальными прокси для объектов домена в первой сборке. Это накладывает ограничение на сборку вида, поскольку она зависит от сборки слоя домена. например выше, сборка View Project зависит от сборки Domain Project. Я подозреваю, что перемещение визуальных прокси из проекта просмотра в проект домена решит проблему, однако это будет противоречить разделению ответственности.

При вызове метода Assembly.LoadFile() для сборки представления я получаю типичное исключение FileNotFoundException. Я полагаю, что это связано с тем, что сборка доменного уровня, загружаемая первой, находится за пределами корня, в котором выполняется приложение, и, следовательно, не находится в пути зонда. На что я надеялся в рамках этого процесса, так это на то, что, поскольку базовая сборка уже была загружена, зависимость сборки представления от нее будет удовлетворена. К сожалению, это не так.

AppDomainSetup.PrivateBinPath для меня не вариант. Это наложило бы ограничения на установку разработчиками расширений в файловой структуре, в которой было установлено приложение, что привело бы к загрязнению, а это не то, что нам нужно или желательно. Я знаю, насколько проще было бы выполнить эту задачу, если бы в корне установленного приложения был один каталог Extensions.

Что я хотел бы сделать, так это иметь возможность загружать сборки и получать их зависимости от других сборок, которые уже были загружены и добавлены в AggregateCatalog.

Есть ли у кого-нибудь какие-либо мысли, предложения или советы, которые могут помочь мне достичь моей цели?


person Deryk Robosson    schedule 06.01.2012    source источник
comment
Где и почему вы вызываете Assembly.LoadFile() в сборке представления?   -  person Jake Berger    schedule 09.01.2012
comment
Когда я создаю расширение для конкретной машины, каждая ссылка на файл сборки добавляется в AssemblyCatalog, который, в свою очередь, добавляется в AggregateCatalog. Я загружаю сборку представления, чтобы удовлетворить зависимость визуального прокси при работе со связанным экземпляром.   -  person Deryk Robosson    schedule 10.01.2012


Ответы (1)