Должна ли загрузка модулей OnDemand Prism работать в сценарии OOB? Если так, я не могу заставить его работать. На данный момент в браузере все работает без проблем. В частности, я: регистрирую свои модули в коде:
protected override IModuleCatalog GetModuleCatalog() {
var catalog = new ModuleCatalog();
Uri source;
if( Application.Current.IsRunningOutOfBrowser ) {
source = IsolatedStorageSettings.ApplicationSettings[SOURCEURI] as Uri;
}
else {
var src = Application.Current.Host.Source.ToString();
src = src.Substring( 0, src.LastIndexOf( '/' ) + 1 );
source = new Uri( src );
IsolatedStorageSettings.ApplicationSettings[SOURCEURI] = source;
IsolatedStorageSettings.ApplicationSettings.Save();
}
if( source != null ) {
var mod2 = new ModuleInfo { InitializationMode = InitializationMode.OnDemand,
ModuleName = ModuleNames.mod2,
ModuleType = "mod2.Module, mod2.Directory, '1.0.0.0', Culture=neutral, PublicKeyToken=null" ),
Ref = ( new Uri( source, "mod2.xap" )).AbsoluteUri };
catalog.AddModule( mod2 );
}
// per Jeremy Likeness - did not help.
Application.Current.RootVisual = new Grid();
return ( catalog );
}
позже делается запрос на загрузку модуля:
mModuleManager.LoadModule( ModuleNames.mod2 );
и дождитесь ответа на событие, опубликованное во время инициализации этого загруженного модуля.
Кажется, что модуль никогда не загружается, и когда приложение работает под отладчиком, появится окно сообщения, в котором указано, что веб-сервер вернул ошибку «не найден». Я могу взять запрашивающий URL-адрес модуля, ввести его в Firefox и без проблем загрузить модуль.
Мне не удалось найти никаких ссылок на то, что это действительно работоспособно, но похоже, что это должно быть. Самое большее, что я нашел по этой теме, - это запись в блоге Джереми Likeness, который описывает загрузку модулей в MEF, но применение его знаний здесь не помогло.
Сервер - localhost (я слышал, что это может вызвать проблемы). На сервере есть файл clientaccesspolicy.xml, хотя я не думаю, что он понадобится. Я использую клиентский стек и регистрирую его во время создания приложения:
WebRequest.RegisterPrefix( Current.Host.Source.GetComponents( UriComponents.SchemeAndServer, UriFormat.UriEscaped ), WebRequestCreator.ClientHttp );
Последующие вопросы:
Можно ли каким-либо образом установить все xap на рабочий стол клиента или только xap основного приложения? указать их как-нибудь в appmanifest.xml ??
Стоит ли делать это, если установлен только application.xap, а остальные xaps все равно нужно загружать?