Использование MEF с экспортируемым проектом, который использует ресурсы (xml), содержащиеся в xap

Я делаю доказательство концепции приложения в SL4, используя MEF, и как часть приложения я импортирую другой xap из существующего проекта Silverlight и отображаю его в моем основном проекте.

Проблема в том, что существующее приложение использует некоторые файлы .xml (в качестве содержимого) и использует linq2xml для загрузки этих файлов, которые (предполагается, что они) включены в xap.

Когда я составляю приложение, инициализация не выполняется, потому что хост-приложение не содержит файлов xml. Если я скопирую эти xml-файлы в основной проект и запустю его, композиция будет работать нормально. Однако мне нужно сохранить файлы xml в исходном проекте.

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

Или мне следует разработать какой-то контракт с импортом / экспортом для передачи файлов xml на хост xap?

Поскольку люди, разрабатывающие импортированные xaps (если проект будет продолжен), принадлежат к другой компании, я хотел бы свести к минимуму изменения в способах разработки своих приложений.


person JSmyth    schedule 08.03.2010    source источник
comment
отличный вопрос (и ответ ниже!). добавление закладок на будущее, так как я думаю, что мне нужно будет сделать то же самое.   -  person Todd Main    schedule 21.03.2010


Ответы (2)


Я полагаю, вы используете DeploymentCatalog для загрузки второго xap? К сожалению, нет возможности получить доступ к ресурсам, включенным в этот xap. Вы можете встроить ресурсы в сборки, которые включены в xap, а затем изменить способ их загрузки.

Если вы действительно не хотите изменять способ структурирования вторичного xap, вы можете написать свой собственный каталог развертывания, который также позволит вам загружать ресурсы из загруженного xap. Исходный код DeploymentCatalog доступен, так что вы можете основывать его на нем.

person Daniel Plaisted    schedule 08.03.2010
comment
Спасибо за ответ. Да, я использую DeploymentCatalog - я рассмотрю ваши предложения. - person JSmyth; 09.03.2010

Мне удалось найти решение, которое меня вполне устраивает.

Вместо того, чтобы создавать файлы .xml как «контент» для использования в xap, я создал их как «ресурс», затем использовал Application.ResourceStream () и загрузил xml с помощью потока.

Это означает, что вторым разработчикам xap придется изменить способ своей работы, но я уверен, что они справятся только с одной дополнительной строкой кода и изменением действия сборки.

person JSmyth    schedule 09.03.2010