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 );
并等待对该加载模块初始化期间发布的事件的响应.
模块似乎永远不会被加载,当应用程序在调试器下运行时,会出现一个消息框,指出Web服务器返回了“未找到”错误.我可以获取模块的请求URL并将其输入Firefox并下载模块没有问题.
我一直无法找到任何实际可行的参考,但似乎应该如此.我在这个主题上发现的最多的是一个blog entry by Jeremy Likeness,它涵盖了MEF中的加载模块,但是在这里应用他的知识并没有帮助.
服务器是localhost(我听说它提到这可能会导致问题).服务器有一个clientaccesspolicy.xml文件 – 虽然我不认为这是必需的.
我正在使用客户端堆栈并在应用程序构建期间注册它:
WebRequest.RegisterPrefix( Current.Host.source.GetComponents( UriComponents.SchemeAndServer,UriFormat.UriEscaped ),WebRequestCreator.ClientHttp );
后续问题:
可以通过某种方式将所有xaps安装到客户端桌面 – 或者只安装主应用程序xap?不知怎的,在appmanifest.xml中指定它们?
如果只安装了application.xap并且必须下载其他的xaps,是否值得这样做?
解决方法
一旦我在类似的情况下工作.诀窍是将模块存储在隔离存储中,并使用模块加载器在脱机工作时从隔离存储中读取.
这是因为否则,您无法下载与Shell不同的.xap文件中的模块.
谢谢,达米安
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。