Можно подключить пользовательские загрузчики модулей в Prism, если вы хотите настроить источник Prism и собрать его самостоятельно.Я действительно смог заставить это работать довольно легко - в нашем приложении я сначала смотрю на диск для модуля, и если он не найден, я возвращаюсь к загрузке его с сервера через сторонний коммерческий стек HTTP, который поддерживаетклиентские сертификаты.
Для этого загрузите исходный код Prism и найдите класс Microsoft.Practices.Composite.Modularity.XapModuleTypeLoader.Этот класс использует другой класс Prism, Microsoft.Practices.Composite.Modularity.FileDownloader, для загрузки содержимого .xap;но он создает его непосредственно, не давая вам возможности ввести свой или что-то еще.
Итак - в XapModuleTypeLoader я добавил статическое свойство для установки типа загрузчика:
public static Type DownloaderType { get; set; }
Затем я изменил метод CreateDownloader (), чтобы использовать тип, указанный выше, предпочтительнее типа по умолчанию:
protected virtual IFileDownloader CreateDownloader() {
if (_downloader == null) {
if (DownloaderType == null) {
_downloader = new FileDownloader();
} else {
_downloader = (IFileDownloader)Activator.CreateInstance(DownloaderType);
}
}
return _downloader;
}
Когда мое приложение запускается, я задаю свой собственный тип загрузчика:
XapModuleTypeLoader.DownloaderType = typeof(LocalFileDownloader);
Вуаля - теперь Prism вызывает ваш код для загрузки своих модулей.
Я могу отправить вам мой класс LocalFileDownloader, а также класс, к которому он прибегает для загрузки .xap из Интернета, если вы 'интересно ... хотя я подозреваю, что если вы посмотрите на класс FileDownloader Prism, то увидите, что он достаточно прост.
Что касается других ваших вопросов, файл clientaccesspolicy.xml, вероятно, не нужен, если URL-адресприложение установлено под тем же приложением, с которым вы разговариваете, или если вы пользуетесь повышенным доверием.
.xaps может быть предварительно установлен наклиент, но это немного работы.Мы разработали приложение для запуска, которое представляет собой отдельное настольное приложение .NET 2.0.Он загружает основной .xap плюс определенные модули * (проверяет наличие обновлений и загружает только при необходимости), затем при необходимости удаляет / переустанавливает приложение, а затем запускает приложение.Последние два выполняются с помощью sllauncher.exe, который устанавливается как часть Silverlight.Вот хорошее вступление к этому: http://timheuer.com/blog/archive/2010/03/25/using-sllauncher-for-silent-install-silverlight-application.aspx.
Предполагая, что вы работаете с повышенным доверием, также должна быть возможность предварительно извлечь модуль .xaps из SL-клиента, но до того, как они на самом делезапрошено из-за действий пользователя.Вам просто нужно поместить их в папку в разделе «Мои документы», а затем использовать описанный выше подход к загрузке пользовательских модулей, чтобы извлечь их оттуда.
* В нашем случае наш основной файл .xap равен 2 /3 заявки.Остальные наши .xaps невелики, поэтому мы скачиваем их «на лету», за исключением некоторых .xaps, которые мы создали в качестве контейнеров для сторонних компонентов.Мы не ожидаем, что они будут обновляться очень часто, поэтому мы их предварительно устанавливаем.